2016-07-15 62 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(#后)