我在
Greasemonkey脚本在单独的范围内运行,也可能在沙箱中运行,具体取决于@grant
设置。
另外,问题代码隔离greasy
在功能范围内(如gladoscc所说)。
最后,默认情况下, test.js 将在Greasemonkey脚本之前启动,因此无论如何它都不会看到任何设置变量。使用@run-at document-start
来解决这个问题。
因此,鉴于此 test.js ,请在运行之前</body>
:
window.targetPages_GlobalVar = 'stovetop';
console.log ("On target page, local global: ", targetPages_GlobalVar);
console.log ("On target page, script global: ", gmScripts_GlobalVar);
然后,以下将起作用:
没有沙箱:
// ==UserScript==
// @name _Greasemonkey and target page, variable interaction
// @include http://YOUR_SERVER.COM/YOUR_PATH/*
// @include http://output.jsbin.com/esikut/*
// @run-at document-start
// @grant none
// ==/UserScript==
//--- For @grant none, could also use window. instead of unsafeWindow.
unsafeWindow.gmScripts_GlobalVar = 'greasy';
console.log ("In GM script, local global: ", unsafeWindow.targetPages_GlobalVar);
console.log ("In GM script, script global: ", gmScripts_GlobalVar);
window.addEventListener ("DOMContentLoaded", function() {
console.log ("In GM script, local global, after ready: ", unsafeWindow.targetPages_GlobalVar);
}, false);
使用沙盒,没有函数作用域,unsafeWindow
:
==> 重要更新: Greasemonkey更改了unsafeWindow 2.0版本的处理,下一个示例脚本将不适用于GM
2.0或更高版本。其他两个解决方案仍然有效。
// ==UserScript==
// @name _Greasemonkey and target page, variable interaction
// @include http://YOUR_SERVER.COM/YOUR_PATH/*
// @include http://output.jsbin.com/esikut/*
// @run-at document-start
// @grant GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
introduced in GM 1.0. It restores the sandbox.
*/
unsafeWindow.gmScripts_GlobalVar = 'greasy';
console.log ("In GM script, local global: ", unsafeWindow.targetPages_GlobalVar);
console.log ("In GM script, script global: ", unsafeWindow.gmScripts_GlobalVar);
window.addEventListener ("DOMContentLoaded", function() {
console.log ("In GM script, local global, after ready: ", unsafeWindow.targetPages_GlobalVar);
}, false);
使用沙箱,没有函数作用域, 脚本注入 :
// ==UserScript==
// @name _Greasemonkey and target page, variable interaction
// @include http://YOUR_SERVER.COM/YOUR_PATH/*
// @include http://output.jsbin.com/esikut/*
// @run-at document-start
// @grant GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
introduced in GM 1.0. It restores the sandbox.
*/
function GM_main () {
window.gmScripts_GlobalVar = 'greasy';
console.log ("In GM script, local global: ", window.targetPages_GlobalVar);
console.log ("In GM script, script global: ", window.gmScripts_GlobalVar);
window.addEventListener ("DOMContentLoaded", function() {
console.log ("In GM script, local global, after ready: ", window.targetPages_GlobalVar);
}, false);
}
addJS_Node (null, null, GM_main);
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);
}
笔记:
unsafeWindow
并且window
是相同的。所有这些脚本在控制台上产生相同的输出:
In GM script, local global: undefined
In GM script, script global: greasy
On target page, local global: stovetop
On target page, script global: greasy
In GM script, local global, after ready: stovetop
该 脚本注入 代码将在各种除了Firefox浏览器的工作。unsafeWindow
目前仅适用于Firefox + Greasemonkey(或Scriptish)或Chrome + Tampermonkey。
问题内容: 我正在制作一个依靠块概念的css网格系统。所以我有一个基本文件,例如: 它由mixin使用: 但我也希望javascript能够访问基本文件中的变量。我当时想我可以创建一个不可见的div,并为其赋予$ block-width,$ block- height和$ block-margin属性,然后从中获取值。但是max- columns不能直接映射到任何东西,因此我不得不想出一种hack
我有两个变量A和B,如果A=1,那么B应该B=2,如果A=2,那么B应该B=1,就像这样,有三对,最好的方法是什么,而不是只有if-else
问题内容: 因此,我有一个用于列表视图的onItemLongClickListener,该列表视图传递了一个参数“ int位置”。在内部,我有一个带有两个按钮的alertDialogBuilder。我还有另一个按钮的onclickListener。我需要从第二个侦听器内部访问该位置。反正有没有做到这一点而不使其成为全球性的呢? 谢谢你的帮助。 问题答案: 在Java中,只有先将内部变量声明为,
问题内容: 有没有办法从javascript访问CSS变量?这是我的css变量声明。 问题答案: 只是标准方式: 获取计算的样式 使用以获得所需的属性的值 getComputedStyle(element).getPropertyValue(‘–color-font-general’); 例:
问题内容: 我需要使用 PHP* 访问 JavaScript 变量。这是我当前正在尝试的代码的简化版本,无法正常工作: * 我对JavaScript和PHP都是全新的,因此,我非常感谢任何建议。 更新 :好的,我想我简化了太多。我正在尝试创建一个表单,该表单在提交时将更新Twitter状态。我的表格工作正常,但我还想添加地理位置数据。由于我使用Javascript(特别是Google Geoloc
在我的SpringBoot应用程序中,我有两个实体和 我的DTO看起来非常相似,直到我意识到这可能会导致递归问题,当一个有一个字段,它有一个相同的字段,它有一个相同的字段,等等。 因此,我决定只把s交给我的DTO,所以它们看起来像这样 我的制图器很简单,以前是这样的 我将如何更改它们,以便他们将转换为/从和转换为/从?