![](/img/trans.png)
[英]How can I mimic Greasemonkey/Firefox's unsafeWindow functionality in Chrome?
[英]How can I access a site's unique JavaScript Objects without using unsafeWindow?
我目前正在尝试编写一个脚本,该脚本将尝试在Chrome扩展程序中使用。 我知道unsafeWindow
在Chrome中不起作用,所以我找到了一种解决方法( 通过此人的github )来模仿对象的功能。
这是链接中的相关代码:
var unsafeWindow = (function() {
var e1 = document.createElement('p')
e1.setAttribute('onclick', 'return window;');
return e1.onclick();
})();
然后,我可以使用此功能来访问网站的自定义/唯一JavaScript对象及其原型/属性,如下所示:
var newVar = unsafeWindow.WEBSITE.uniqueObject.prototype.uniquePrototype ... etc.
有人告诉我,这种变通办法是一种不好的做法,只有在没有其他简单的方法可以访问唯一对象时才使用。
在不使用unsafeWindow
类的情况下,访问网站的唯一对象及其原型/属性的更好或更安全的方法是什么?
我注意到您没有给出一个真实的例子 ,并且我不会覆盖所有假设的可能性。 各种现实世界网站都有多种技术。
安全的跨浏览器几乎每次尝试都可以使用,方法是脚本注入 :
function GM_main () {
var newVar = WEBSITE.uniqueObject.prototype.uniquePrototype;
/* Or, explicitely...
var newVar = window.WEBSITE.uniqueObject.prototype.uniquePrototype;
*/
// DO WHATEVER WITH newVar HERE.
}
addJS_Node (null, null, GM_main);
//-- This is a 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);
}
您先前的问题也链接了这两种变化。
但是,人们最想使用unsafeWindow
似乎是unsafeWindow
广告显示计时器或触发通常由链接或按钮触发的javascript。
在常见的按钮/链接方案中,请不要使用unsafeWindow
破坏沙箱。 只需以编程方式click
或mousedown
click
控件即可 。
在作弊网站计时器的情况下, 由于它是一行 (不计算hack),因此这是unsafeWindow
可能非常适合的一种情况。 例如:
unsafeWindow.payTheBillsTimerCounter = 0;
谨防:
unsafeWindow
。 unsafeWindow
hack可能会在Chrome 28版本左右被阻止。要在Chrome上直接编写脚本,请切换至Tampermonkey 。 Tampermonkey可能会继续支持unsafeWindow
,而不需要任何黑客(就您而言)。 您可以使用“ 消息传递”在浏览器页面和扩展程序之间安全地发送信息,反之亦然。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.