我曾经能够这样做来创建一个包含一些数据的导出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调用不安全。在这种情况下,如何访问和修改新打开的浏览器选项卡的文档?
答案 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);