0

我找到了一个函数(通过这个人的 github),我可以在我的脚本中使用它来模仿 API 对象的功能。

以下是链接中的相关代码:

unsafeWindow = (function() {
    var e1 = document.createElement('p')
    e1.setAttribute('onclick', 'return window;');
    return e1.onclick();
})();

海报说您可以使用格式中的功能unsafeWindow.jQuery

现在,我希望能够$在我的代码中的其他地方使用 jQuery 关键字来代替。我尝试从这个堆栈溢出问题中学习以简化它并重新编写代码,如下所示:

(function($){
    var e1 = document.createElement('p')
    e1.setAttribute('onclick', 'return window;');
    return e1.onclick();
})(jQuery);

但它没有用。我想我可以尝试类似$ = unsafeWindow.jQuery的东西来映射到$,但我想尝试以上面看到的格式进行。

4

1 回答 1

1

$你会像这样映射unsafeWindow.jQuery

unsafeWindow    = ( function () {
    var dummyElem   = document.createElement('p');
    dummyElem.setAttribute ('onclick', 'return window;');
    return dummyElem.onclick ();
} ) ();

var $ = unsafeWindow.jQuery;

// Now you can use the page's jQuery. EG:
$("body").append ('<p>Content added by unsafeWindow.jQuery</p>');


但请记住:

  1. 这是一个 Hack,它可能会停止在 Chrome 版本 28 上运行。

  2. 由于用户脚本何时触发的竞争条件,它仍然可能失败。要解决此问题,请添加// @run-at document-end到用户脚本的元数据块。

  3. 不要这样做! 它只会引起悲伤、副作用和维护头痛。

    对于用户脚本:使用这种技术(最好的​​跨浏览器)  或  这种技术(依赖于页面的 jQuery,但该示例也显示了如何使用 GM_ 函数)

    对于完整的扩展内容脚本:,使用这种技术(使用manifest.json并保持一切正确的沙盒)

于 2013-04-18T02:30:13.733 回答