GreaseMonkey - 在执行期间修改变量

GreaseMonkey - Modify variable during execution

几天来,我一直在尝试在脚本执行期间修改变量。

HTML 页面有一个脚本标签,它调用一个 JavaScript 文件 :

<script type="text/javascript" src="script.js"></script>

我们在 JS 文件中有这样的东西:

/*File's beggining*/
val = 1;
if (val == 1) { window.open('getout.html', '_self');}
...
/*File's ending*/

我想修改 val 的值以避免重定向。 我已经找了几天了;但我卡住了。如果有人能给我提示,那就太好了!

感谢阅读!

您可以做的是 运行 在页面的任何脚本 运行 之前添加您的脚本,并将 val 声明为 un-assignable 属性全局对象 window with Object.defineProperty:

// ==UserScript==
// ...
// @run-at document-start
// ==/UserScript==

Object.defineProperty(window, 'val', { value: 0 });

对全局变量 val 的后续赋值将无效。

val = true;
console.log(val); // => 0

如果变量在与 var 相同的范围内重新声明,它仍然有效并且不会抛出。

假设您发布的代码在全球范围内。如果不是,则无法从您的脚本中覆盖该值。在那种情况下,我会尝试另一种途径并直接覆盖 window.open 函数。