访问和修改使用Google Chrome中的window.open打开的标签

时间:2010-04-08 06:27:57

标签: javascript google-chrome webkit

我曾经能够这样做来创建一个包含一些数据的导出HTML页面。但该代码无法与最新版本的Google Chrome一起使用(它适用于Chrome 5.0.307.11 beta和所有其他主流浏览器)。

function createExport(text) {  
    var target = window.open();  
    target.title = 'Memonaut - Exported View';  
    target.document.open();  
    target.document.write(text);  
    target.document.close();  
}

Chrome现在抱怨域名不匹配,并且禁止JavaScript调用不安全。在这种情况下,如何访问和修改新打开的浏览器选项卡的文档?

4 个答案:

答案 0 :(得分:2)

当使用file:// protocol(在Linux下的Chromium 5.0.342.9(Developer Build 43360)中)使用本地页面时,我也遇到了这个问题。确切的错误消息是:

  

不安全的JavaScript尝试访问   带有URL的框架:框架中的空白   用URL   文件:///home/foo/bar/index.htm。   域,协议和端口必须   匹配。

显然协议不匹配,但好消息是:当在Web服务器上显示此页面时,Chromium还会打开一个新窗口为“about:blank”,但它不会再抱怨了。使用通过http://localhost访问的本地Web服务器时也可以使用它。

编辑:有关于此问题的错误filed upstream。根据{{​​3}},它是固定的,很快就会被卷入主干。

更新:此错误现已修复,以下测试用例正常运行:

var target = window.open();
target.title = 'Memonaut - Exported View';
target.document.open();
target.document.write("test");
target.document.close();

答案 1 :(得分:0)

以下是我认为的解释

http://groups.google.com/group/chromium-dev/browse_thread/thread/9844b1823037d297?pli=1

您是否正在访问其他域中的任何数据?不确定,但这可能会导致这个问题。

答案 2 :(得分:0)

一种替代方案是数据:协议URL。

https://developer.mozilla.org/en/data_URIs

http://msdn.microsoft.com/en-us/library/cc848897%28VS.85%29.aspx

var durl = "data:text/html," + encodeURIComponent(text);
var target = window.open(durl);

在IE7及以下版本的所有现代浏览器中均受支持。

答案 3 :(得分:0)

您也可以尝试使用此代码关闭自选标签/窗口,

最初我之前为了关闭而制作了这个小greasemonkey脚本 糟糕的弹出窗口和广告窗口,它工作公平(虽然不太好)...

//window.addEventListener("load", function () {
window.addEventListener("onbeforeunload", function () {
    try {
        // clear inner html content to prevent malicious JS overrides. 
        document.getElementsByTagName("html")[0].innerHTML = "";

        window.open("javascript:window.close();", "_self", "");
        window.open("javascript:window.close();", "_self", "");
    }
    catch (e) {}
}(), false);