代码之家  ›  专栏  ›  技术社区  ›  gustafc

在IE(6)中设置document.domain后读取window.location

  •  5
  • gustafc  · 技术社区  · 15 年前

    我有一个情况,一个页面上有一个脚本 www.example.com/index.html 打开 home.example.com/foo.html 在弹出窗口中。当用户关闭弹出窗口时,我想通过在其上调用一个javascript函数(对dom做一些事情)来通知Opener页面。我使用 unbeforeunload 这样地:

        // In index.html on www.example.com:
        window.fn = function () { /* Perform stuff after foo.html has closed */ }
    
        // In foo.html on home.example.com:
        window.onbeforeunload = function () {
            if (window.opener && window.opener.fn)
                window.opener.fn();
        };
    

    这不起作用,因为网页在不同的域上。我可以设定 document.domain 克服此问题的属性:

    document.domain = "example.com";
    

    不幸的是,我在foo.html方面使用的Web应用程序框架(apache-wicket)不能很好地发挥作用,因为它包含一个脚本,它执行如下操作:

    var src = (window.location.protocol == 'https:') ? something : other;
    

    显然,在IE6中 * ,设置文档域时, location 对象变为只写,因此尝试读取 window.location.protocol 抛出“拒绝访问”。

    所以,我的问题是: 如何允许跨域javascript函数调用,同时仍允许脚本读取 位置 对象?

    • 我不能通过服务器。(我要调用的函数所执行的工作实际上不是这样发挥的。)
    • 我看不懂 window.location.protocol(窗口位置协议) 设置前属性 领域文献 然后在条件赋值中使用这个值;这样做需要我重建Web框架库——而不是我想做的事情。

    * 可能也在其他版本的IE中;还没有检查过。

    2 回复  |  直到 10 年前
        1
  •  1
  •   Will Peavy    15 年前

    你能用jquery吗?有一个很好的插件可以让您通过IE6-8中的iframe执行window.postmessage: http://benalman.com/code/test/js-jquery-postmessage/

    您可以从iframe打开弹出窗口,并通过postmessage在iframe和parent之间传递对象。

        2
  •  0
  •   Mohammad    15 年前

    我看不懂 window.location.protocol属性 在设置document.domain和 然后在条件中使用该值 转让;这样做需要我 重建Web框架库 -我不想做什么。

    在设置document.domain之前不能读取window.location.protocol,在window.location.protocol变成只写时不能读取它吗?这是否也需要重新构建框架?这是一个黑客,但IE也是。