我尝试使用用户脚本更改页面中的变量。 我知道在源代码中有一个变量
var smilies = false;
理论上我应该能够改变它:
unsafeWindow.smilies = true;
但它不起作用。当我试图提醒或将变量记录到控制台而没有劫持时,我发现它未定义。
alert(unsafeWindow.smilies); // undefined !!!
编辑:如果有任何改变,我会使用Chrome浏览器
http://code.google.com/chrome/extensions/content_scripts.html说:
内容脚本在称为隔离的特殊环境中执行 世界。他们可以访问他们注入的页面的DOM, 但不是页面创建的任何JavaScript变量或函数。 它将每个内容脚本视为没有其他JavaScript 在正在运行的页面上执行。
关于Chrome扩展程序,但我猜这与用户脚本的情况相同?
谢谢你,Rob W.所以需要它的人的工作代码:
var scriptText = "smilies = true;";
var rwscript = document.createElement("script");
rwscript.type = "text/javascript";
rwscript.textContent = scriptText;
document.documentElement.appendChild(rwscript);
rwscript.parentNode.removeChild(rwscript);
答案 0 :(得分:22)
在Content scripts(Chrome扩展程序)中,页面的全局window
对象与内容脚本的全局对象之间存在严格的分离。
Object.defineProperty
Example + notes 。最终的内容脚本代码:
// This function is going to be stringified, and injected in the page
var code = function() {
// window is identical to the page's window, since this script is injected
Object.defineProperty(window, 'smilies', {
value: true
});
// Or simply: window.smilies = true;
};
var script = document.createElement('script');
script.textContent = '(' + code + ')()';
(document.head||document.documentElement).appendChild(script);
script.parentNode.removeChild(script);