2016-07-15 60 views
0

我正在開發一個插件,它會在點擊一個帶有特殊html的按鈕時打開一個新選項卡。現在,html文件位於專用的web空間中,但有沒有解決方法,我可以將html文件放入插件本身的數據結構中並從那裏訪問它?問題是,當按鈕被點擊到url時,我傳遞了活動網站的url,並將它連接起來,我在那個html中使用了AngularJS,這似乎是一個問題。訪問firefox插件中的html文件

我的代碼:

index.js:

var { ActionButton } = require("sdk/ui/button/action"); 
var tabs = require("sdk/tabs"); 
var data = require("sdk/self").data; 

var button = ActionButton({ 
    id: "my-button", 
    label: "Start LLIBrowser", 
    icon: { 
    "16": "./img/logo-16.png" 
    }, 
    onClick: showPlugIn 
}); 

function showPlugIn(state){ 
    let currUrl = tabs.activeTab.url; 
    //var file = "file:///home/janine/OneDrive/Uni/OvGU/4. Semester/SoftwareProjekt/LLIBrowserGalleryAndInfo/data/overlay.html"; just for testing 
    var file = "http://www-e.uni-magdeburg.de/jpolster/LLIBrowser/overlay.html"; 
    var completePath = file.concat("?url=").concat(currUrl); 

    tabs.open(completePath) 
} 

什麼想法?

乾杯!

回答

2

從理論上講,我沒有看到任何問題。 將您的HTML文件中的數據文件夾,並獲得它通過:

var file = data.url("overlay.html"); 

編輯:M.Onyshchuk是正確的話,這將觸發

的地址是無效

錯誤。我沒有想到「:」。爲了解決這個問題,只需從URL中刪除協議信息。

currUrl = currUrl.replace(/^https?\:\/\//i, ""); 

仍然使用您的插件內AngularJS,最簡單的方法是簡單地出貨當前版本與你的插件。下載最新版本,將其放入您的數據文件夾中,並按照您通常的方式簡單地訪問您的HTML文件。

雖然我不熟悉AngularJS,但我想不出有什麼理由不應該這麼做。

祝您的項目順利!

Sintho

1

這是不夠的,更改文件加載URI:

var file = data.url("overlay.html"); 

你會看到錯誤在這種情況下,

的地址是無效

但是,您可以修改您的代碼併發送當前標籤網址而不是作爲曲目URI的ERY一部分,但作爲一個片段部分:

let currUrl = tabs.activeTab.url; 
    currUrl = currUrl.replace(":", "%"); 
    var file = data.url("overlay.html"); 
    var completePath = file.concat("#").concat(currUrl); 

不幸的是encodeURIComponent方法不起作用:

let currUrl = encodeURIComponent(tabs.activeTab.url); // The address isn't valid 

您將需要overlay.html

解析片段URI(#後)