【问题标题】:trying to map someFunction.jQuery to "$"试图将 someFunction.jQuery 映射到“$”
【发布时间】:2013-04-10 21:31:57
【问题描述】:

我发现了一个函数 (via this person's github),我可能会在我的脚本中使用它来模拟 API 对象的功能。

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

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

海报上说你可以使用unsafeWindow.jQuery格式的函数

现在,我希望能够在我的代码中的其他地方使用 $ 而不是 jQuery 关键字。我尝试向this stack overflow question 学习以简化它并重新编写代码,如下所示:

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

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

【问题讨论】:

  • 你真的在做扩展吗?也就是说,你有manifest.json吗?如果是这样,那么这是一个content-script 问题,而不是userscripts 问题。 PS:making a userscript into a full-featured content script 很简单。
  • 我刚给你改了。目前,您正在做的 用户脚本,而不是大多数人认为的扩展程序(但 Chrome 中有很多重叠)。
  • 既然你刚开始,我建议你安装 Tampermonkey 扩展。然后,您可以编写一个脚本,该脚本在 GM+Firefox 和 Tampermonkey+Chrome 中几乎总是可以正常工作。与普通 Chrome 用户脚本相比,Tampermonkey 具有许多其他优势。

标签: javascript jquery userscripts


【解决方案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. 不要这样做!只会引起悲伤、副作用和维护头痛。

    对于 用户脚本: 使用 this technique (best cross-browser)this technique (relies on page's jQuery, but the example shows how to use GM_ functions too)

    对于完整的扩展内容脚本:,使用this technique (use the manifest.json and keep everything properly sandboxed)

【讨论】:

  • 在我链接的所有 3 种方法中,您根本不使用 unsafeWindow。对于像 jQuery 这样的库,你永远不应该使用 unsafeWindow。如果可以的话,您应该完全避免使用unsafeWindowunsafeWindow 适用于那些非常罕见的场景,当您无法找到任何其他解决方案,只能使用页面的 unique JavaScript 对象,并且使用似乎太琐碎而无法使用脚本注入时。 manifest.json 方法为您的脚本提供自己的 jQuery 副本,无需 unsafeWindow 并提供许多其他好处(超出此问题的范围)。
  • 但是现在我的问题是,为了我的脚本的目的,我需要访问和使用某个网站的唯一 JavaScript 对象。如果我不使用 unsafeWindow 或模仿它的函数,我怎么能这样做? (如果这看起来像是一个多余的问题或者甚至是愚蠢的问题,我很抱歉(我自己的研究只产生了unsafeWindow 作为访问这些隐藏的独特对象的一种方式),你非常有帮助,我很感激你的时间)。跨度>
  • 打开一个新问题并提供具体细节您尝试使用的代码、您的真正目标以及您尝试过的内容。 问题已得到解答,并且 cmets 不是为无休止的后续问题或切题问题而设计的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-03
  • 1970-01-01
  • 2019-05-27
  • 1970-01-01
  • 2015-12-27
  • 1970-01-01
相关资源
最近更新 更多