gpt4 book ai didi

javascript - document.write() 在 Firefox 的用户脚本中不起作用

转载 作者:行者123 更新时间:2023-11-28 01:26:09 25 4
gpt4 key购买 nike

我有一些使用的用户脚本

var tab = window.open('', '_blank');
tab.document.write(myCustomHtml);
tab.document.close();

向用户显示输出(myCustomHtml 是我之前在代码中定义的一些有效的 HTML)。从版本 27 开始,它在 Firefox 中的工作就停止了,现在我只得到一个空文档。没有任何控制台错误。

使用 Firefox 控制台检查时,新打开的文档只有此内容

<html>
<head></head>
<body>
</body>
</html>

当源代码为空时。

该代码可以在 Chrome 中运行。

我需要对较新的 Firefox 版本 (27+) 和更新的 Greasemonkey (1.15) 进行任何修改吗?我还没有发现任何最近向 Firefox 报告的有关此问题的错误。

这是一个测试脚本

// ==UserScript==
// @name document.write() test
// @namespace stackoverflow.com
// @description tests document.write()
// @include https://stackoverflow.com/questions/22651334/*
// @include http://stackoverflow.com/questions/22651334/*
// @version 0.0.1
// ==/UserScript==

var tab = window.open('', '_blank');
tab.document.write('<html><head></head><body><ul><li>a</li><li>b</li><li>c</li></ul></body></html>');
tab.document.close();

最佳答案

我不确定 Greasemonkey 或 Firefox 是否已经犯了这个错误,但是从 Greasemonkey 脚本 window.open 到空白页面现在会触发 Same Origin Policy违规。
同时,页面范围、控制台范围和 Firebug 的控制台都工作正常。

Greasemonkey 范围给出:

SecurityError: The operation is insecure

是否使用@grant none

这个,再加上GM_openInTab()的一般无用性,让我怀疑这是一个 Greasemonkey bug。我现在没有时间研究它,但是file a bug report ,如果你愿意的话。

要使其在最新版本的 Firefox (28.0) 和 Greasemonkey (1.15) 上运行,我必须执行以下操作:

  1. 告诉我的弹出窗口拦截器(暂时)允许来自 stackoverflow.com 的弹出窗口。
  2. 将弹出代码插入页面范围。
  3. 对 URL 使用明确的 about:blank
  4. 等待新窗口加载。

这是一个适用于最新 FF+GM 版本的完整脚本:

// ==UserScript==
// @name document.write () test
// @description tests document.write ()
// @include http://stackoverflow.com/questions/22651334/*
// ==/UserScript==

function fireNewTab () {
var newTab = window.open ('about:blank', '_blank');
newTab.addEventListener (
"load",
function () {
//--- Now process the popup/tab, as desired.
var destDoc = newTab.document;
destDoc.open ();
destDoc.write ('<html><head></head><body><ul><li>a</li><li>b</li><li>c</li></ul></body></html>');
destDoc.close ();
},
false
);
}

addJS_Node (null, null, fireNewTab);

function addJS_Node (text, s_URL, funcToRun, runOnLoad) {
var D = document;
var scriptNode = D.createElement ('script');
if (runOnLoad) {
scriptNode.addEventListener ("load", runOnLoad, false);
}
scriptNode.type = "text/javascript";
if (text) scriptNode.textContent = text;
if (s_URL) scriptNode.src = s_URL;
if (funcToRun) scriptNode.textContent = '(' + funcToRun.toString() + ')()';

var targ = D.getElementsByTagName ('head')[0] || D.body || D.documentElement;
targ.appendChild (scriptNode);
}

关于javascript - document.write() 在 Firefox 的用户脚本中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22651334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com