2012-09-27 24 views
0

我有一個網站在不同網址的幾個環境中運行(即dev.mysite.comqa.mysite.comuat.mysite.com等)。
在每個環境中都有一個Greasemonkey腳本(myGM.user.js),但其版本可能不同,並且根據環境需要調用不同的Web服務來獲取某些數據。如何獲取Greasemonkey腳本的原始安裝URL?

在我的用戶腳本中,我想要獲取該用戶腳本最初安裝的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
數據。

什麼是最簡單的方法來實現呢?謝謝!

回答

1

我已經添加了一個ASPX頁面(可以是PHP或其他)到相同的文件夾。它只是確定當前主機(服務器端)並將其輸出爲文本。

所以,如果你瀏覽到
http://dev.mysite.com/getHost.aspx
他們的迴應是
http://dev.mysite.com/
如果你瀏覽到
http://uat.mysite.com/getHost.aspx
反應是
http://uat.mysite.com/

然後,在我的myGM.user.js我ve added
// @resource rootUrl GetSiteRoot.aspx
此資源指令採用與安裝用戶腳本的URL相關的URL,並將響應與用戶腳本本身一起下載。

這讓我打電話給
GM_getResourceText('rootUrl')
在用戶腳本的身體,確切地知道我的劇本是從ω安裝/ O不必做任何改動,從環境到環境中。

P.S.不過,我會提交一個功能請求,添加GM_Info API。

+0

+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*\/\/\[email protected]\s+(.+?)\s*\n/i); 
if (dwnldURLMtch && dwnldURLMtch.length) { 
    dwnloadURL = dwnldURLMtch[1]; 
} 
console.log (dwnloadURL); 
+0

感謝您的解決方法。然而,我會傾向於在不同環境中保持相同版本的'myGM.user.js'完全相同。我想出了一個不同的解決方案,並將其發佈在下面。 – IMK

+0

可以理解,但你***確實說過,「但它的(myGM.user.js)版本可以不同......'」。 ;) –