2014-12-19 38 views
1

我正在使用addon-SDK方法開發Firefox的插件。我想知道,無論如何,只要點擊該contentURL中的鏈接,就可以將該面板中顯示的html(contentURL)更改爲新的網頁。提前致謝。在面板中顯示一個新的html /網頁

+0

您可能需要訪問的[問]對於建議如何改善你的問題並避免投票。 – ochi 2014-12-19 06:07:28

+0

@Ochi這是一個很好的問題。 Vignesh是有一種方式。我很久以前就做過了,但是已經脫離了sdk循環,因此可能有一些sdk開發人員可以與您分享的推薦方式。 – Noitidart 2014-12-19 07:31:10

+1

也許這可以幫助回答你的問題:http://stackoverflow.com/questions/16073930/how-do-i-display-a-link-in-a-panel-on-my-firefox-extension-using-the -add-on-sdk – ochi 2014-12-19 07:40:29

回答

1

維涅什這裏的接收網址點擊代碼:

https://developer.mozilla.org/en-US/Add-ons/SDK/High-Level_APIs/panel#Scripting_panel_content

var myScript = "window.addEventListener('click', function(event) {" + 
       " var t = event.target;" + 
       " if (t.nodeName == 'A')" + 
       " self.port.emit('click-link', t.toString());" + 
       "}, false);" 

var panel = require("sdk/panel").Panel({ 
    contentURL: "http://www.bbc.co.uk/mobile/index.html", 
    contentScript: myScript 
}); 

panel.port.on("click-link", function(url) { 
    console.log(url); 
}); 

panel.show(); 

,那麼你可以更改爲,而不是執行console.log(URL),你可以把它找到你的面板和將其iframes位置更改爲該網址。我不知道如何用sdk方法做到這一點,也許別人可以分享。我會嘗試這樣做,雖然:

panel.port.on("click-link", function(url) { 
    panel.contentURL = url; 
}); 

編輯: panel.contentURL = url可能無法正常工作,所以你必須做這樣的:

const { getMostRecentBrowserWindow } = require('sdk/window/utils'); 
var aXULBrowser = getMostRecentBrowserWindow(); 
aXULBrowser.getElementById('ID OF YOUR PANEL, probably same as id to your widget here').getElementsByTagName('iframe').contentWindow.location = url; 
+0

@Vignesh如果'panel.contentURL = url'不起作用,那麼你可以做我上面添加的東西。如果你無法弄清楚面板的ID,可以使用DOM Insepctor和Elment Inspector插件,然後右鍵單擊面板,它會在檢查器中打開它,然後可以輕鬆地看到面板ID。 – Noitidart 2014-12-22 20:13:21