2010-11-18 64 views
3

我正在開發一個將狀態欄中放置按鈕的Firefox擴展。點擊按鈕後,擴展插入一些JavaScript到當前頁面。這個Javascript有一個我想用一些參數調用的函數。我已經管理注入代碼,我通過Firebug檢查了頁面,並驗證JS已經被注入。如何在我的擴展中的頁面中調用Javascript函數?在開發Firefox擴展時在頁面中執行注入的Javascript代碼

- 更多信息

下面是我用注入我的javascript代碼:

var doc = window.content.document; 

//Add the script 
var visibilityJS = doc.createElement("script"); 
visibilityJS.setAttribute("type", "text/javascript"); 
visibilityJS.setAttribute("charset", "UTF-8"); 
visibilityJS.setAttribute("src", "chrome://visibility/content/scripts/visibility.js"); 
head.appendChild(visibilityJS); 

//Call the function 
alert("Executing testfunction"); 
window.content.document.defaultView.testFunction(); 

..和我的JS文件中的代碼,我要去注入。即visibility.js

window.testFunction = function() { 
    alert("Message"); 
} 

謝謝。

回答

4

這工作。我不知道技術問題。我從Felix獲得了部分解決方案,其中一部分來自here

window.content.document.defaultView.wrappedJSObject.testFunction(); 
2

如果你在你注入的代碼聲明一個全局變量(或明確設置window對象的屬性),那麼一個辦法做得到從您的擴展這個元素的引用,是通過gBrowser對象:

gBrowser.contentDocument.defaultView.yourObject 
      ^-- HTML document^
       object   |-- window object 

請注意,當您在代碼中使用windowdocument時。根據上下文的不同,它可能指向Firefox窗口或網站窗口對象。

+0

嗨費利克斯。我無法弄清楚你的意思。我嘗試閱讀文檔,即您指出的頁面,但我仍然無法完全理解。我嘗試了'window.content.document。<函數名稱>'但那不起作用。你會碰巧有一個簡單的例子或什麼?謝謝。 – 2010-11-18 20:38:43

+0

@Mridang Agarwalla:你很近。 'window.content.document'應該和'gBrowser.contentDocument'一樣。但是這給了你網站的文檔對象。全局變量總是網站的「窗口」對象的屬性。 'document.defaultView'應該給你那個對象。試試'window.content.document.defaultView。<函數名稱>'。 – 2010-11-18 23:08:51

+0

再次菲利克斯。我似乎還無法訪問它。我得到以下錯誤 - 'window.content.document.defaultView.testFunction'不是一個函數。我嘗試從JavaScript控制檯調用'testFunction',它工作但擴展仍然無法訪問它。以任何方式添加或修改我注入的Javascript代碼?再次感謝。 – 2010-11-19 07:47:36