我正在使用Execute JS在Firefox中编写和测试Javascript代码。我想打开一个新的标签/窗口并写一些内容,然后我尝试了
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator);
var win = wm.getMostRecentWindow("navigator:browser");
printWindow = win.open("about:blank");
printWindow = wm.getMostRecentWindow("navigator:browser");
printWindow.gBrowser.selectedBrowser.contentDocument.write('hello');
和
myWindow=window.open('','','width=200,height=100')
myWindow.document.write("<p>This is 'myWindow'</p>")
myWindow.focus()
但是我总是得到这个错误
[例外......“手术不安全。”代码:“18”nsresult: “0x80530012(SecurityError)”
有没有办法解决这个异常?
答案 0 :(得分:22)
修改:截至2018年,此解决方案no longer works。因此,您将在新窗口中打开about:blank
并向其中添加内容。
不要“写”到窗口,只需用你需要的内容打开它:
var data = "<p>This is 'myWindow'</p>";
myWindow = window.open("data:text/html," + encodeURIComponent(data),
"_blank", "width=200,height=100");
myWindow.focus();
供参考:data URIs
答案 1 :(得分:7)
Chrome,Firefox(有一些例外),IE和Edge(可能还有其他浏览器可以启动)阻止了对数据网址的顶级导航。它们显然常用于网络钓鱼攻击,主要浏览器供应商认为危险性超过了合法用例提供的价值。
此Mozilla security blog post解释说Firefox会阻止
- 使用以下网址导航到新的顶级数据URL文档的网页:
window.open("data:…");
window.location = "data:…"
- 点击
<a href="data:…">
(包括ctrl + click,'open-link-in- *'等)。- 使用以下网址重定向到新的顶级数据URL文档的网页:
- 302重定向到
"data:…"
- 元刷新到
"data:…"
- 外部应用程序(例如,ThunderBird)在浏览器中打开数据URL
但不会阻止
- 用户明确地将
"data:…"
输入/粘贴到地址栏- 打开所有纯文本数据文件
- 在顶级窗口中打开
"data:image/*"
,除非它是"data:image/svg+xml"
- 打开
"data:application/pdf"
和"data:application/json"
- 下载数据:网址,例如'{1}}
的'save-link-as'
您还可以阅读proposal to deprecate and remove top-frame navigation to data URLs in Chrome并查看current Chrome status indicating that is has been removed。
至于如何在新标签页或窗口中实际打开HTML,这应该足够了:
"data:…"
请注意,至少在Chrome中external scripts injected via document.write might not be loaded on slower connections。这可能与此无关,但值得注意。
答案 2 :(得分:3)
var winPrint = window.open('', '', 'left=0,top=0,width=800,height=600,toolbar=0,scrollbars=0,status=0');
winPrint.document.write('<title>Print Report</title><br /><br />
Hellow World');
winPrint.document.close();
截至2018年,window.open(uri)在chrome中不起作用