青菜猫(孙宇博客),青菜猫(孙宇博客),青菜猫(孙宇博客)http://www.javasdc.cn/
posts - 29,  comments - 63,  trackbacks - 0

    好久没有写过js了,近日项目中,有个需求就是,新打开窗口页面,对于新窗口我总结以下2点
  1.最基本的弹出窗口代码window.open()这个也相对简单,大家都调用过,建义大家用绝对路径(http://),以下是参数
window.open 弹出新窗口的命令;
  'page.html' 弹出窗口的文件名; 
'newwindow' 弹出窗口的名字(不是文件名),非必须,可用空''代替;
height=100 窗口高度;
width=400 窗口宽度;
top=0 窗口距离屏幕上方的象素值;
left=0 窗口距离屏幕左侧的象素值;
toolbar=no 是否显示工具栏,yes为显示;
menubar,scrollbars 表示菜单栏和滚动栏。
resizable=no 是否允许改变窗口大小,yes为允许;
location=no 是否显示地址栏,yes为允许;
status=no 是否显示状态栏内的信息(通常是文件已经打开),yes为允许;

用这个方法在浏览器中,基本都会被屏蔽,大家可以通过
var val = window.open(url),返回值来判断
if(!val){
这里表示被屏蔽了,没有成功,。大家可以在这里加个相对应的业务代码。我当时如果处理是如果屏蔽了,
用document.location.href=url内部跳转。
}
2、以上方法最基本的问题没有解决,就是屏蔽。所以告诉大家一个最完美window.open()不会
屏蔽的,道理很简单,就是建一个form.然后提交form,因为form可以在新窗口提高
给大家看看代码吧。
在你的页面里<form action="" method="get" target="_blank" id="tzForm" name="tzForm"/>
<div id="J_formStr"></div>
</form>
然后js
function openUrl(urlStr){
var pStr="";
if(urlStr.indexOf("?")!= -1){
var str = urlStr.substr(urlStr.indexOf("?")+1,urlStr.length);
strs = str.split("&");
for(var i = 0; i < strs.length; i ++){
pStr=pStr+"<input type='hidden' name='"+strs[i].split("=")[0]+"' value='"+strs[i].split("=")[1]+"' />";
}
}
document.getElementById("J_formStr").innerHTML=pStr;
document.tzForm.action=urlStr;
document.tzForm.submit();
}
大家可能会问,为什么还要这多代码。不就是一个提交表单。给大家说说原因吧
(1) 为什么用get,而不用post,在新窗口页面如果用post然后刷新。会有一个提交数据的对话框,所以才用get
(2)用get提交有个很关键的问题,如果你的url提交地址中有相对应的参数,打个比方,***.jsp?a=1&b=2在新窗口中
?a=1&b=2参数丢失掉。所以在上面有个pStr这个就是解析url中的参数,然后动态创建的表单元素,这样参数就不会
丢失。
我项目已经用了,感觉还不错,确实是很基础的东西,分享一下,欢迎大家拍砖。。。

 
posted on 2010-07-05 16:09 青菜猫(孙宇) 阅读(3110) 评论(10)  编辑  收藏 所属分类: js


FeedBack:
# re: 关于网页打开新窗口的解决方案,拒绝屏蔽[未登录]
2010-07-05 17:19 | Sam
看了标题被吸引了,所以进来看看。

完整的看了你的代码,已经理解你的解决办法,楼主对于该问题精神可嘉。

但我比较怀疑,首先是应用场景及环境。
1. 不知道你的demo代码如何写的(如何弹出的?是手工点击按钮还是自动弹出等等)。
2. 在你的测试环境中,何种浏览器(何种插件)对该脚本免疫?

我毕竟这种方法不是新技术或者特别的技巧。这么说的原因是因为你在挑战开发浏览器的程序员思维和逻辑,很难想象他们(FF, Chrome..)会不检测你上面的逻辑,或者判断不出来是否属于非法弹出窗口。

期待回复:)  回复  更多评论
  
# re: 关于网页打开新窗口的解决方案,拒绝屏蔽[未登录]
2010-07-05 17:27 | Sam
一点补充:
3. 如果跨域提交是否依然work很好?  回复  更多评论
  
# re: 关于网页打开新窗口的解决方案,拒绝屏蔽[未登录]
2010-07-05 17:34 | 刘俊杰
嗯,不错,谢了
  回复  更多评论
  
# re: 关于网页打开新窗口的解决方案,拒绝屏蔽
2010-07-05 19:34 | 青菜猫(孙宇)
@Sam
呵呵,目前火狐,IE6,傲游,Chrome都已经通过,手工点击按钮点的,因为我要操作一个逻辑,然后在新窗口,
肯定不会非法弹出窗口。因为是form提交  回复  更多评论
  
# re: 关于网页打开新窗口的解决方案,拒绝屏蔽
2010-07-05 19:36 | 青菜猫(孙宇)
@Sam
其实这边应用还很多场景的,主要是在淘宝社区淘江湖里,。呵呵  回复  更多评论
  
# re: 关于网页打开新窗口的解决方案,拒绝屏蔽
2010-07-06 01:50 | POP
给个完整的DEMO呀。。。。这都不知道如何用  回复  更多评论
  
# re: 关于网页打开新窗口的解决方案,拒绝屏蔽
2010-07-06 08:50 | liucr
楼主:是不是这种方法与〈a href="*.jsp?a=1&b=2" target="_blank"..../〉效果一样呀?如果这样是不是可以不那么麻烦?  回复  更多评论
  
# re: 关于网页打开新窗口的解决方案,拒绝屏蔽
2010-07-06 09:14 | 青菜猫(孙宇)
@liucr
恩,一样的效果,是因为在js中要新窗口  回复  更多评论
  
# re: 关于网页打开新窗口的解决方案,拒绝屏蔽
2010-07-06 13:10 | ding
Dim intFPO, intNFPO As Integer
'搜索列
With Worksheets("PivotTable").Rows(501)
Set C = .Find("PO-框架下PO", LookIn:=xlValues)
If Not C Is Nothing Then
intFPO = C.Column
End If
End With
  回复  更多评论
  
# re: 关于网页打开新窗口的解决方案,拒绝屏蔽
2010-08-04 10:09 | da
那怎么让这个新弹出的窗口去掉工具栏呢,望能指教  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 
<2010年7月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

青菜猫(孙宇)结交天下朋友,在网上吸取知识..

常用链接

留言簿(16)

随笔分类

随笔档案

文章分类

搜索

  •  

最新评论

阅读排行榜

评论排行榜

青菜猫(孙宇博客),青菜猫(孙宇博客),青菜猫(孙宇博客)http://www.javasdc.cn/