UserScripts&Greasemonkey:調用網站的JavaScript函數



Answers

由於顯而易見的原因,GreaseMonkey腳本(以及Chrome的用戶腳本)中聲明的函數和變量與網頁聲明的函數和變量保持獨立。 對於Firefox中的GM腳本,您可以通過unsafeWindow訪問全局變量。

安全性和兼容性的最佳方法是使用腳本元素將函數注入頁面。 我在用戶腳本中使用以下代碼段:

function addFunction(func, exec) {
  var script = document.createElement("script");
  script.textContent = "-" + func + (exec ? "()" : "");
  document.body.appendChild(script);
}

這裡的"-"確保將函數解析為表達式,以便exec可以在添加時立即執行。 你這樣調用函數:

function myFunction () {
    return Grooveshark.playNextSong();
}

// Inject the function and execute it:
addFunction(myFunction, true);
Question

我正在為Firefox和Chrome創建一個UserScript擴展,我正在嘗試使用網站JavaScript中的一些代碼,例如:

function: myFunction(){
    return  Grooveshark.playNextSong();
}

問題是當我測試這段代碼時, Grooveshark是一個空引用。

我知道還有其他人做過:

見BetterGrooveshark

但我不知道為什麼我的簡單擴展無法調用Grooveshark的JavaScript函數。

我是否需要將我的腳本“追加”到文檔才能使其正常工作?: document.document.body.appendChild(script);

不是Greasemonkey已經註入我的擴展JavaScript嗎? 請允許有人為我澄清這一點。

謝謝。




Links