我有一个网站在不同的URL上运行在几个环境中(即 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
以获取数据。
的最简单方法是什么? 谢谢!
我最终将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')
在用户脚本的正文中,并确切地知道我的脚本是从哪里安装的,而无需从环境到环境进行任何更改。
附言但是,我将提交一个功能请求,以便将其添加到 API GM_Info。
附加组件记录了脚本的原始安装 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 (/ns*//s+@downloadURLs+(.+?)s*n/i);
if (dwnldURLMtch && dwnldURLMtch.length) {
dwnloadURL = dwnldURLMtch[1];
}
console.log (dwnloadURL);