开发者

Accessing and modifying tabs opened using window.open in Google Chrome

I used to be able to do this to create an exported HTML page containing some data. But the code is not working with the latest version of Google Chrome (It works all right with Chrome 5.0.307.11 beta and all other major browsers).

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

Chrome now complains that the domains don't match and disallows the JavaScript calls as unsafe. How can I access and modify the document of a newly开发者_运维问答 opened browser-tab in such a scenario?


I also got this problem when using a local page using the file:// protocol (in Chromium 5.0.342.9 (Developer Build 43360) under Linux). The exact error message is:

Unsafe JavaScript attempt to access frame with URL about:blank from frame with URL file:///home/foo/bar/index.htm. Domains, protocols and ports must match.

Apparently the protocols don't match, but the good news is: when this page on a web server, Chromium also opens a new window as "about:blank", but it doesn't complain any longer. It also works when using a local web server accessed via http://localhost.

EDIT: there is bug filed upstream about this. According to this comment, it is fixed and it will be rolled into trunk shortly.

UPDATE: this bug is now fixed, the following test case works properly:

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


Here is the explanation I think

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

Are you accessing any data from other domain? Not sure, but that might be causing this problem.


One alternative would be a data: protocol 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);

Supported in all modern browsers except IE7 and below.


you can also try closing self tab/window by using this code,

originally I've made this small greasemonkey script sometime ago in order to close bad popups and ad windows, it worked fair (not too brilliant though)...

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜