繁体   English   中英

如何在不使用unsafeWindow的情况下访问网站的唯一JavaScript对象?

[英]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破坏沙箱。 只需以编程方式clickmousedown click控件即可

在作弊网站计时器的情况下, 由于它是一行 (不计算hack),因此这是unsafeWindow可能非常适合的一种情况。 例如:

unsafeWindow.payTheBillsTimerCounter = 0;

谨防:

  1. 愤怒的网站管理员理论上可以利用unsafeWindow
  2. 请不要违反任何服务条款 (TOS)。
  3. 请支持您使用大量资源的网站。
  4. 对于Chrome用户脚本和内容脚本, unsafeWindow hack可能会在Chrome 28版本左右被阻止。要在Chrome上直接编写脚本,请切换至Tampermonkey Tampermonkey可能会继续支持unsafeWindow ,而不需要任何黑客(就您而言)。
    Tampermonkey还提供了近乎完美的Greasemonkey兼容性以及Chrome用户脚本不提供的许多功能。

您可以使用“ 消息传递”在浏览器页面和扩展程序之间安全地发送信息,反之亦然。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM