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
函数。
几天来,我一直在尝试在脚本执行期间修改变量。
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
函数。