1

我有一个站点在不同 URL 的几个环境中运行(即dev.mysite.comqa.mysite.comuat.mysite.com等)。
每个环境都有一个 Greasemonkey 脚本 ( myGM.user.js ),但它的版本可能不同,并且根据环境,需要调用不同的 Web 服务来获取一些数据。

在我的用户脚本中,我想获取最初安装该用户脚本的 URL,因此我可以提取主机并将其用作我的 Web 服务 URL 的前缀。

例如,如果我的脚本是从 安装的
    http://dev.mysite.com/myGM.user.js
我想从中获取
    http://dev.mysite.com/myGM.user.js
提取
    http://dev.mysite.com/
并调用
    http://dev.mysite.com/myWebService/getData
数据。

实现这一目标的最简单方法是什么?谢谢!

4

2 回答 2

1

我最终将一个 ASPX 页面(可能是 PHP 或其他)添加到与myGM.user.js. 它只是确定当前主机(服务器端)并将其输出为文本。

因此,如果您浏览到
http://dev.mysite.com/getHost.aspx
响应将是
http://dev.mysite.com/
如果您浏览到
http://uat.mysite.com/getHost.aspx
响应将是
http://uat.mysite.com/

然后,在我myGM.user.js添加
// @resource rootUrl GetSiteRoot.aspx
的这个资源指令中,获取一个相对于安装用户脚本的 URL 的 URL,并将响应与用户脚本本身一起下载。

这使我可以调用
GM_getResourceText('rootUrl')
用户脚本的主体并确切地知道我的脚本安装在哪里,而无需对环境进行任何更改。

PS,不过,我会提交一个功能请求,以便添加 GM_Info API。

于 2012-09-27T21:01:44.397 回答
0

即使 Greasemonkey 附加组件记录了脚本的原始安装 URL,Greasemonkey 脚本也无法使用此信息。

这似乎是GM_info应该提供的东西,但事实并非如此。您可以尝试打开功能请求

目前,唯一的解决方法是在每个地方都有稍微不同的脚本版本。(诚​​然,您已经这样做了。 )具体来说,在脚本的元数据块中添加和更改一行。
您可以使用指令@downloadURL如下所示:

// ==UserScript==
// @name        YOUR SCRIPT
// @include     http://YOUR_SERVER.COM/YOUR_PATH/*
// @downloadURL http://qa.mysite.com/myGM.user.js
// ==/UserScript==

或者创建自己的指令,如下所示:

// ==UserScript==
// @name            YOUR SCRIPT
// @include         http://YOUR_SERVER.COM/YOUR_PATH/*
// @myInstallLocale http://dev.mysite.com/myGM.user.js
// ==/UserScript==


脚本会像这样读取位置:

var dwnloadURL   = "";
var dwnldURLMtch = GM_info.scriptMetaStr.match (/\n\s*\/\/\s+@downloadURL\s+(.+?)\s*\n/i);
if (dwnldURLMtch  &&  dwnldURLMtch.length) {
    dwnloadURL   = dwnldURLMtch[1];
}
console.log (dwnloadURL);
于 2012-09-27T04:11:05.037 回答