如何在 Google Chrome 的 Greasemonkey 脚本中使用 jQuery?
你们中有些人可能知道,Google Chrome 对 Greasemonkey 脚本设置了一些严格的限制。
Chromium 不支持
@require
、@resource
、unsafeWindow
、GM_registerMenuCommand
、GM_setValue< /code> 或
GM_getValue
。
如果没有 require,我找不到在 Google Chrome 下将 jQuery 库包含在 Greasemonkey 脚本中的方法。
有人对这件事有什么建议吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
来自 "用户脚本提示:使用 jQuery - Erik Vold 的博客"
From "User Script Tip: Using jQuery - Erik Vold's Blog"
我根据 Erik Vold 的脚本帮助我运行文档中的函数、代码和其他脚本。您可以使用它们将 jQuery 加载到页面中,然后在全局
window
范围下运行代码。使用示例
您可以点击此处进行安装,如果您相信我不会试图诱骗您安装恶意软件,并且没有人编辑我的帖子以指向其他内容。重新加载页面,您应该会看到我的帖子周围有一个边框。
函数
load(url, onLoad, onError)
将
url
处的脚本加载到文档中。 (可选)可以为onLoad
和onError
提供回调。execute(functionOrCode)
将函数或代码字符串插入到文档中并执行它。这些函数在插入之前会转换为源代码,因此它们会丢失当前作用域/闭包,并在全局
window
作用域下运行。loadAndExecute(url, functionOrCode)
快捷方式;这会从
url
加载脚本,然后插入并执行functionOrCode
(如果成功)。代码
I have written a few functions based on the Erik Vold's script to help run me run functions, code and other scripts in a document. You can use them to load jQuery into the page and then run code under the global
window
scope.Example Usage
You can click here to install it, if you trust that I'm not trying to trick you into installing something malicious and that nobody has edited my post to point to something else. Reload the page and you should see a border around my post.
Functions
load(url, onLoad, onError)
Loads the script at
url
into the document. Optionally, callbacks may be provided foronLoad
andonError
.execute(functionOrCode)
Inserts a function or string of code into the document and executes it. The functions are converted to source code before being inserted, so they lose their current scope/closures and are run underneath the global
window
scope.loadAndExecute(url, functionOrCode)
A shortcut; this loads a script from
url
, then inserts and executesfunctionOrCode
if successful.Code
通过调用
jQuery.noConflict(true)
使用 jQuery 不用担心冲突。像这样:但是,对于跨浏览器脚本,如果可以的话,为什么不利用一个漂亮、快速的本地 jQuery 副本呢?
以下内容作为 Chrome 用户脚本和 Greasemonkey 脚本运行,并且如果平台支持的话,它会使用 jQuery 的本地
@require
副本。Use jQuery without fear of conflicts, by calling
jQuery.noConflict(true)
. Like so:But, For cross-browser scripts, why not take advantage of a nice, fast, local copy of jQuery, when you can?
The following works as a Chrome userscript and a Greasemonkey script, and it uses the nice local
@require
copy of jQuery, if the platform supports it.如果页面已经有 jQuery,则只需遵循此模板:
If the page already has jQuery, then just follow this template:
简单的方法是使用
required
关键字:发布页面上提供了较新的版本。切勿使用“最新”版本 - 它不是历史原因。
The simple way is using
required
keyword:Newer versions are available on the releases page. Never use the "latest" version – it is not the latest version for historical reasons.
有一种非常简单的方法可以解决在 Chrome 脚本中包含 jQuery 的完整副本当这些脚本实际上不使用任何特权功能(GM_* 函数等)...
只需插入脚本本身进入页面 DOM 并执行!最好的部分是,这项技术在 Firefox+Greasemonkey 上也同样有效,因此您可以对两者使用相同的脚本:(
毫无歉意地从 meta.stackoverflow 上的 Shog9 中窃取,因为他没有将其移到此处,我必须删除元帖子..)
There's a really easy way to get around including a full copy of jQuery for Chrome scripts when those scripts don't actually use any privileged features (GM_* functions, etc)...
Simply insert the script itself into the page DOM and execute! The best part is that this technique works just as well on Firefox+Greasemonkey, so you can use the same script for both:
(unapologetically stolen from Shog9 on meta.stackoverflow since he didn't move it here, and I have to delete the meta post..)
另外,您可以使用 jQuery to Chrome 扩展打包您的脚本。请参阅Google Chrome 浏览器的内容脚本。
与 Greasemonkey 脚本不同,Chrome 扩展可以自动更新。
Also, you could pack your script with jQuery to Chrome extension. See Google Chrome's Content Scripts.
Chrome extensions, unlike Greasemonkey scripts, can auto-update itself.
更简单的解决方案:将 jquery.min.js 的内容剪切并粘贴到用户脚本的顶部。完毕。
我发现推荐答案存在各种问题。 addJQuery() 解决方案适用于大多数页面,但在许多页面上都存在错误。如果遇到问题,只需将 jquery 内容复制并粘贴到脚本中即可。
Easier solution: cut+paste the contents of jquery.min.js into the top of your user script. Done.
I found various problems with the recommended answers. The addJQuery() solution works on most pages but has bugs on many. If you run into issues just copy+paste the jquery contents into your script.
我想知道您是否不能在 GM 脚本中依赖
document.defaultView.jQuery
:I wonder if you couldn't rely on
document.defaultView.jQuery
in your GM script ala:另一种方法是修改脚本以手动加载 jQuery。来自 http://joanpiedra.com/jquery/greasemonkey/ 的示例:
编辑:DRATS ! 经过测试,此代码似乎不起作用,因为 Google Chrome 在与实际网页不同的范围/进程中运行用户脚本/扩展。您可以使用 XmlhttpRequest 下载 jQuery 代码,然后对其进行评估,但您必须将代码托管在允许 使用
Access-Control-Allow-Origin: *
标头进行跨源资源共享。遗憾的是,当前使用 jQuery 的 CDN 都不支持这一点。Another approach would be to modify your script to load jQuery manually. Example from http://joanpiedra.com/jquery/greasemonkey/:
EDIT: DRATS! After testing it appears this code does not work since Google Chrome runs userscripts/extensions in a separate scope/process from the actual webpage. You can download the jQuery code using an XmlhttpRequest and then Eval it, but you have to host the code on a server that allows Cross-Origin Resource Sharing using the
Access-Control-Allow-Origin: *
header. Sadly NONE of the current CDNs with jQuery support this.将 jQuery 嵌入 Chrome 控制台的完美扩展,就像您想象的那样简单。此扩展还指示 jQuery 是否已嵌入到页面中。
该扩展用于将 jQuery 嵌入到您想要的任何页面中。它允许在控制台 shell 中使用 jQuery(您可以通过“Ctrl+Shift+j”调用 Chrome 控制台)。
要将 jQuery 嵌入到选定的选项卡中,请单击扩展按钮。
扩展程序链接:https://chrome.google.com/extensions/detail/gbmifchmngifmadobkcpijhhldeeelkc
Perfect extension to embed jQuery into Chrome Console as simple as you can imagine. This extension also indocates if jQuery has been already embeded into page.
This extension used to embed jQuery into any page you want. It allows to use jQuery in the console shell (You can invoke Chrome console by "Ctrl+Shift+j").
To embed jQuery into selected tab click on extention button.
LINK to extension: https://chrome.google.com/extensions/detail/gbmifchmngifmadobkcpijhhldeeelkc