疑难杂症:Webbrowser访问某些网页脚本执行不成功的问题

hpygzhx520 2014-08-27 09:46:25
典型的测试网站:http://mp3.sogou.com/,测试IE内核版本,IE10

用IE打开,点击一首歌曲,会先跳出一个空白页,接着,这个空白页导航到歌曲播放。如果此时从主页点击另外一首歌曲,会关闭之前打开的播放页面,重新打开空白页,导航到播放歌曲……

如果用webbrowser来做这件事情,不拦截任何新窗口的话,现象是这样的:点击一首歌曲,会先跳出一个空白页,这个空白页保持不变,接着又跳出一个新页面,在这个页面中播放歌曲。如果此时从主页点击另外一首歌曲,会关闭之前的空白页,但之前播放歌曲的页面没有关闭,再打开一个播放歌曲的新页面。说起来比较混乱,测试一下即可明白。

测试了几个浏览器(双核浏览器的话切换到IE内核测试),都是这个现象。如果说所有浏览器(IE内核)都是这样,那么似乎可以放弃了。但测试到GB浏览器的时候,和IE表现一样完美!于是又燃起一丝希望,所以来此求助。

看了一下脚本:

点击一个链接的时候,调用:

// 播放单首歌曲的方法:由于参数较短,可以采用类jsonp的方式访问跨域的qqcgi.jsp
function openQQPlayer(songList)
{
openEmptyWindow("_webQQMusicPlayer");
songList = songList.replace(/\"/g, "");
songList = songList.replace(/#/g,"\"");
var ajaj =document.createElement("script");
ajaj.src="http://mp3.sogou.com/qqcgi.jsp?d="+window.location.host+"&songlist=" + encodeURIComponent(songList);
ajaj.charset="gb18030";
document.body.appendChild(ajaj);
}

这个函数调用了:

function openEmptyWindow(sWindowName)
{
var ua = navigator.userAgent.toLowerCase();
if (typeof sWindowName !== "string") {
sWindowName = "_webQQMusicPlayer";
}
try{
if(!ua.ie)
{
if(top.window.win)
{
top.window.win.close();
top.window.win = null;
}
}
}
catch(e)
{

}
try{

if(!top.window.win || top.window.win.closed == true)
{
top.window.win = window.open("about:blank", sWindowName);
if (!top.window.win && !(ua.tt>=5))
{
showMsgbox("弹出窗口被拦截,请取消拦截!", 1, 2000);
}

}
}
catch(e)
{

}

}

上述openQQPlayer里面好像openEmptyWindow是成功的,但后续就不一样了。

经过反复测试,已知结论如下:

1、与IE渲染模式无关。即FEATURE_BROWSER_EMULATION项无关。

2、FEATURE_SCRIPTURL_MITIGATION这项设置是必须的。在IE8下,应该设置这项注册表即可正常。但在IE10下,设置了也不正常。

3、早期开源的GB代码用VC6编译后都是正常的,可以正常访问。但从GB源码中也找不到关键点。
...全文
313 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hpygzhx520 2014-09-29
  • 打赏
  • 举报
回复
一点头绪都没有
ckkyjtqlt 2014-09-12
  • 打赏
  • 举报
回复
请问知道是什么原因了吗?
hpygzhx520 2014-08-29
  • 打赏
  • 举报
回复
自己顶一下………………
hpygzhx520 2014-08-28
  • 打赏
  • 举报
回复
感觉var ajaj =document.createElement("script");没有执行在新建的页面上

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧