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



我有一个网站在不同的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以获取数据。

实现这一目标

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

我最终将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。

即使 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 (/ns*//s+@downloadURLs+(.+?)s*n/i);
if (dwnldURLMtch  &&  dwnldURLMtch.length) {
    dwnloadURL   = dwnldURLMtch[1];
}
console.log (dwnloadURL);

相关内容

最新更新