360安全浏览器不支持js弹出窗口某些属性探究
这阵子写一个asp.net的系统,想在GridView中插入一列超链接,并用JavaScript弹出一个窗口,查看GridView给出条目信息的相关详细。本来以为用个HyperLinkField,再简单不过,搞了很久,老是出错,Google了一番,才知道原来是因为.NET 2.0中不再支持 DataNavigateUrlFormatString=”JAVASCRIPT:……” 的写法,所以也就不能直接写JS了。解决方案是在后台代码页中添加RowDataBound事件:
protected void *_RowDataBound(object sender, GridViewRowEventArgs e) {
if (e.Row.RowType == DataControlRowType.DataRow) {
e.Row.Cells[*].Text = "<a href=""javascript:"" onclick=""javascript:var List =
window.open('*.aspx','查看','top=150,left=50,toolbar=no, menubar=no,scrollbars=yes, resizable=no, location=no, status=no, width=850,height=400');"">查看</a>"";
}
}
写完后习惯性地F5运行了一下,由于我的PC上默认的浏览器是360安全浏览器,所以直接用的是360打开,点了一下“查看”的链接,发现确实是有打开一个新的页面,然而却不是预想中的网页小窗口的形式(定义中width=850,height=400),这里打开的是类似于target=””black””的一个新的浏览器窗口;郁闷不已,原本准备重新Google一番的,突然记起之前写css时候曾受360的千番折磨,遂抱着试试的态度顺手打开了Firefox,不料仅能顺利的弹出一个小窗口,又用了chore试验,成功。一时火气,真想把360浏览器卸了。分析了一下,除了得出这是内核的问题外似乎没有其他什么可能,遂在开始菜单中翻找出IE8,打开,不料也能正常弹出一个小窗口。很不服气,再试了一下搜狗浏览器,发现和360一样的异常。这到底是怎么一回事,貌似JavaScript函数window.open中定义的诸多属性比如width、menubar等等对其并未产生应有的效果。特意下载了一个opera,试了试,正常弹出窗口。又用IE-tester在IE6下试验,有问题。
考虑到在asp.net中测试到底是不怎么客观的,毕竟涉及到太多动态方面的内容,问题很可能来自我并不很熟悉的控件方面,索性动手写了一个html页面,如下:
<html>
<head>
<title></title>
<script LANGUAGE="JavaScript">
function openwin() {
window.open ("test.html", "newwindow", "height=100, width=400, toolbar=no, menubar=no,
scrollbars=no, resizable=no, location=no, status=no");
}
</script>
</head>
<body onload="openwin()">
</body>
</html>
试验在360中还是发现一样的问题。用搜狗浏览器却很神奇得打开了一个IE的弹出窗口(此时我正好运行着IE8)。Google+百度了一阵子,据说360用的的确是IE的内核,而搜狗确是一半ie一半Webkit引擎。
真是无比混乱。无奈中仔细研究了一下360浏览器的工具栏,发现有个管理功能组件的菜单,下面有个广告拦截扩展,点选项进去,弹出一个广告过滤设置的对话框,默认情况下“拦截弹出窗口”是选中状态,一时欣喜莫名,以为找到问题所在了,忙取消掉勾,重启了浏览器,又试了试,还是一样的问题,js并没有弹出一个窗口,而是在浏览器上打开了一个新窗口。莫名奇妙。到底是什么问题使JavaScript在360这样的IE内核加壳浏览器无中法实现预定义功能呢?360又是如何做到限制js的呢?
不得要领,遂决定花时间把这件怪事记录下来,等有精力再深入钻研。