【问题标题】:JavaScript: void(0), IE6, SWFAddressJavaScript: void(0), IE6, SWFAddress
【发布时间】:2010-02-06 12:00:13
【问题描述】:

您好,

我们即将推出一个安全站点(抱歉,没有 URL)并且在 IE6 中发现了一个相当深奥的错误,我希望有人可能遇到过或能够阐明一些问题。仅当存在三个因素时才会发生这种情况:

  1. 浏览器是 IE6(它是一个金融客户端,这是他们认可的浏览器)
  2. 页面使用SWFAddress,全部为Flash
  3. void(0) 从浏览器书签调用,其值设置为 JavaScript 字符串

如果您熟悉 Instapaper 的“稍后阅读”书签,它会启动一个带有“稍后阅读”按钮的弹出窗口,以将您正在查看的 URL 提交到他们的网站进行记录,那么前提是相同的。

这适用于我测试过的父窗口中的任何其他 URL。仅当 SWF 使用 SWFAddress 更新浏览器历史记录/URL 时,它才会失败,这是一项要求,因为这是我们尝试使用小书签工具捕获的深层链接 URL。

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

我们看到了两件事:

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

这是书签代码:

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 部分由另一家供应商管理,因此我无法控制或了解他们的代码。我真的只是想提出这个问题,看看是否有人遇到过与这组因素有关的问题。

非常感谢, 标记

【问题讨论】:

    标签: javascript internet-explorer-6 swfaddress


    【解决方案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>
    

    【讨论】:

    • 感谢您的回复。不幸的是,要求要求链接位于浏览器 chrome 中,并且可以在多个实例中一致地访问,因此是书签驱动的链接。我可能会在加载 SWF 的页面中尝试您的建议以尝试缩小问题范围,但最终我需要书签 JavaScript 正常运行,而不会导致父窗口导航。
    【解决方案2】:

    您的书签似乎有一些语法错误,可以再减少一点:

    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);

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我们已经解决了这个问题。在这种情况下,不相关的 JavaScript 会影响 SWF 和/或 SWFAddress。不过,感谢您的链接。我们一定会对此进行审查。
      猜你喜欢
      • 2011-08-08
      • 2012-09-19
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      • 1970-01-01
      • 1970-01-01
      • 2021-05-17
      • 1970-01-01
      相关资源
      最近更新 更多