gpt4 book ai didi

JS URI 中的 Javascript 变量范围,或者如何编写页面范围对象?

转载 作者:行者123 更新时间:2023-11-30 18:14:38 25 4
gpt4 key购买 nike

我正在编写一个 Greasemonkey 脚本,我想在 Chrome 和 Firefox 中使用它。我知道您不能像在 Firefox 中那样在 Chrome 中使用 unsafewindow,所以我一直在尝试使用 jS-uris,就像在以下答案中一样:Greasemonkey, Chrome and unsafeWindow.foo() .

当我尝试以下操作时:

location.assign("javascript:var tutu = 'oscar';");
location.assign("alert('1:' + tutu);");
alert('2:' + tutu);

我收到一条错误消息,显示“tutu”未定义。显然我不理解的是这些变量的范围。我需要为我正在做的事情制作全局函数和变量。我做错了什么?

编辑:实际上我认为问题不是我正在尝试的(除非是,在这种情况下请告诉我)但是我正在编写外观脚本的页面与 URL 混淆以阻止它们继续除了相对 URI。

最佳答案

在 Chrome 中,location.assign 调用后会有延迟(它们可能在单独的线程中运行),因此 tutu var 在 alert() 触发,整个代码抛出异常。 (此外,正如三位一体所说,alert 需要以 javascript: 开头。)

您可以像这样使用计时器:

location.assign("javascript:var tutu = 'oscar';");
setTimeout (
function () {location.assign("javascript:console.log('1:' + tutu);"); }
, 666
);

但是,我想你会同意这是一个麻烦的地方。

尝试使用 location.assign 执行页面范围的 javascript 将变得很麻烦,除了最短/最简单的代码。

使用脚本注入(inject)设置、重置和/或运行很多页面范围的javascript:

function setPageScopeGlobals () {
window.tutu = 'Oscar';
window.globVar2 = 'Wilde';
window.globVar3 = 'Boyo';

alert ('1:' + tutu);

window.useGlobalVar = function () {
console.log ("globVar2: ", globVar2);
};
}

//-- Set globals
addJS_Node (null, null, setPageScopeGlobals);

//-- Call a global function
addJS_Node ("useGlobalVar();");

//-- Standard-ish utility function:
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);
}

关于JS URI 中的 Javascript 变量范围,或者如何编写页面范围对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13617768/

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