如何在 GM(greasemonkey) 脚本中使用外部资源
这里所说的外部资源分为三种: 脚本, 图片 和 文本.
先说如何载入外部脚本:
相信很多写 GM 脚本的朋友包括我以前在引入外部脚本时都会使用下面的(或类似的)代码:
-
var jQlab = document.createElement('script');
-
jQlab.type = 'text/javascript';
-
jQlab.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js';
-
document.getElementsByTagName('head')[0].appendChild(jQlab);
这段脚本是可以工作的, 但有个问题, 就是每次执行脚本时都会重新去加载这个脚本, 很浪费时间和带宽.
正确的做法是利用 @require 元标签, 代码如下:
-
// ==UserScript==
-
// 此处省略其他一些 GM 元标签 ...
-
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js
-
// ==/UserScript==
这样做的好处有二: 一是节省代码; 二是不会每次执行脚本都加载, 因为 GM 在安装脚本时会去加载这个文件, 把他下载到本地(脚本所在文件夹中), 之后每次运行脚本时都会到本地文件夹去加载文件, 这样就大大节省了带宽, 同时提高了脚本响应速度.
当然这样做也有一个缺点就是如果被载入文件更新了, 就只能从新安装该脚本, 本地文件不会跟着更新, 因为只在安装时才加载这个文件.
下面再来说说如何加载图片和文本:
这涉及到另外一个 GM 元标签 @resource, 代码如下:
-
// ==UserScript==
-
// 此处省略其他一些 GM 元标签 ...
-
// @resource resourceName http://www.example.com/resource.png
-
// ==/UserScript==
使用时需要用到两个 GM 函数: GM_getResourceURL(resourceName) 和 GM_getResourceText(resourceName), 前者将返回脚本中可用的 url 格式 (base64 编码), 后者返回文件内容.
这个元标签和 @require 一样, 也会在安装脚本的同时将资源下载到本地, 所以如果需要更新资源的话, 请重新安装脚本.








