JavaScript:void(0),IE6,SWFAddress

时间:2009-11-20 16:02:51

标签: javascript internet-explorer-6 swfaddress

问候,

我们即将推出一个安全网站(抱歉,没有网址),并且已经在IE6中发现了一个相当深奥的错误,我希望有人可能遇到过这个错误,或者能够解释一下。只有在存在三个因素时才会出现这种情况:

  1. 浏览器是IE6(它是一个金融客户端,这是他们认可的浏览器)
  2. SWFAddress正在页面中使用,全部是Flash
  3. void(0)从浏览器书签中调用,其值设置为JavaScript字符串
  4. 如果您熟悉Instapaper的“稍后阅读”书签,它会启动一个带有“稍后阅读”按钮的弹出窗口,以便将您正在查看的URL提交到他们的站点进行记录,这是相同的前提。

    这适用于我测试过的父窗口中的任何其他URL。它只在SWF使用SWFAddress更新浏览器历史记录/ URL时失败,这是我们尝试使用bookmarklet工具捕获的深层链接URL。

    据我了解,JavaScript字符串需要以void(0)结尾,以便父窗口不会导航到JavaScript字符串。这是典型的href属性中的旧学校JavaScript应用程序。

    我们看到两件事:

    1. 首次使用书签中的JS代码打开新浏览器窗口后,SWFAddress不再更新浏览器历史记录/ URL栏。
    2. 提交并关闭其中包含表单的新浏览器窗口后,通过书签随后打开窗口会忽略void(0)并重定向父窗口。
    3. 这是书签代码:

      javascript:var%20d=document;w=window,f='http://mydomain.com/popup?l=',l=d.location,e=encodeURI,p=e(l.href),u=f+p;s=p.split('/');if(s[3]=='p'||s[3]=='t')u=u+'&p='+s[5];w.open(u,'p','toolbar=0,menubar=0,directories=0,personalbar=0,resizable=0,status=1,width=300,height=460');void(0);
      

      Flash片段由其他供应商管理,因此我无法控制或洞察他们的代码。我真的只是试图浮动这个问题,看看是否有人遇到过这类因素的问题。

      非常感谢, 标记

3 个答案:

答案 0 :(得分:1)

<强>你好 你可以试试这个

<a href='#' onclick='document;w=window,f='http://mydomain.com/popup?l=',l=d.location,e=encodeURI,p=e(l.href),u=f+p;s=p.split('/');if(s[3]=='p'||s[3]=='t')u=u+'&p='+s[5];w.open(u,'p','toolbar=0,menubar=0,directories=0,personalbar=0,resizable=0,status=1,width=300,height=460');'>click to visit</a>

答案 1 :(得分:1)

看起来你的bookmarklet有一些语法错误,可以减少一点:

javascript:var%20f='http://mydomain.com/popup?l=',l=document.location,e=encodeURI,p=e(l.href),u=f+p,s=p.split('/');if(s[3]=='p'||s[3]=='t')u+='&p='+s[5];open(u,'p','toolbar=0,menubar=0,directories=0,personalbar=0,resizable=0,status=1,width=300,height=460');void(0);

你也可以尝试添加return false;而不是void(0);

答案 2 :(得分:1)

如果您正在使用getURL()或navigateToUrl(),那么您需要知道它与SWFAddress产生冲突。请查看http://www.asual.com/blog/swfaddress/2007/05/18/swfaddress-bad-practices.html以获取解释。