如何获取Greasemonkey脚本的原始安装URL?

时间:2012-09-27 02:55:18

标签: greasemonkey

我有一个网站在不同网址的几个环境中运行(例如 dev.mysite.com qa.mysite.com uat.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
对于数据。

最简单的方法是什么?谢谢!

2 个答案:

答案 0 :(得分: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')
在用户脚本的主体中,确切地知道我的脚本的安装位置,无需从环境到环境进行任何更改。

P.S。但是,我将提交一个功能请求,以便添加GM_Info API。

答案 1 :(得分:0)

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

似乎应该由GM_info提供,但事实并非如此。你可以try opening a feature request

目前唯一的解决方法是在每个地方都有略微不同的脚本版本。 (你肯定已经这样做了。)具体来说,在脚本metadata block中添加和更改一行。
您可以使用the @downloadURL directive,如下所示:

// ==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);