0

我目前正在尝试编写一个脚本,我将尝试在 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

4

2 回答 2

1

我注意到你没有给出一个真实的例子,我也不打算涵盖所有假设的可能性;有多种技术可用于各种现实世界的网站。

安全的跨浏览器几乎每次尝试都可以使用,方法是Script Injection

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似乎是破坏广告显示计时器或触发通常由链接或按钮触发的 javascript。

在常见的按钮/链接场景中,不要使用unsafeWindow. 只是以编程方式clickmousedown控制

在欺骗网站计时器的情况下,因为它是一条线(不包括黑客攻击),这是一种unsafeWindow可能很合适的情况。例如:

unsafeWindow.payTheBillsTimerCounter = 0;

谨防:

  1. 愤怒的站长理论上可以利用unsafeWindow.
  2. 请不要违反任何服务条款(TOS)。
  3. 请支持您使用(大量)资源的网站。
  4. 对于 Chrome 用户脚本和内容脚本,unsafeWindow黑客可能会在 Chrome 版本 28 左右被阻止。对于 Chrome 上的直接脚本,切换到Tampermonkey。Tampermonkey 很可能会继续支持unsafeWindow,而无需任何黑客(就您而言)。
    Tampermonkey 还提供了近乎完美的 Greasemonkey 兼容性和许多 Chrome 用户脚本不具备的功能。
于 2013-04-19T00:08:12.830 回答
0

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

于 2013-04-18T22:27:33.513 回答