从Firefox插件面板中获取当前URL
因此,我收集了5种不同的方法来实现这一点,其中没有一种是在一个面板内工作的。Firefox在阻止访问基本任务方面非常有效 以下是我尝试过的:从Firefox插件面板中获取当前URL,firefox,firefox-addon,Firefox,Firefox Addon,因此,我收集了5种不同的方法来实现这一点,其中没有一种是在一个面板内工作的。Firefox在阻止访问基本任务方面非常有效 以下是我尝试过的: 尝试1: var url = window.top.getBrowser().selectedBrowser.contentWindow.location.href; 错误:window.top.getBrowser不是函数 尝试2: var url = window.content.document.location; 错误:访问属性“文档”的权
- 尝试1:
错误:window.top.getBrowser不是函数var url = window.top.getBrowser().selectedBrowser.contentWindow.location.href;
- 尝试2:
错误:访问属性“文档”的权限被拒绝var url = window.content.document.location;
- 尝试3:
错误:拒绝为类UnnamedClass的对象创建包装的权限var mainWindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor) .getInterface(Components.interfaces.nsIWebNavigation) .QueryInterface(Components.interfaces.nsIDocShellTreeItem) .rootTreeItem .QueryInterface(Components.interfaces.nsIInterfaceRequestor) .getInterface(Components.interfaces.nsIDOMWindow); var url = mainWindow.getBrowser().selectedBrowser.contentWindow.location.href;
- 尝试4:
错误:访问属性“href”的权限被拒绝var url = window.content.location.href;
- 尝试5:
错误:获取属性XPCComponents.classes的权限被拒绝var currentWindow = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getMostRecentWindow("navigator:browser"); var currBrowser = currentWindow.getBrowser(); var url = currBrowser.currentURI.spec;
// http://stackoverflow.com/questions/7856282/get-current-url-from-within-a-firefox-addon-panel
exports.main = function() {
var panel = require("panel").Panel({
contentURL: "data:text/html,<input type=button value='click me' id='b'>",
contentScript: "document.getElementById('b').onclick = " +
"function() {" +
" self.port.emit('myEvent');" +
"}"
});
panel.port.on("myEvent", function() {
console.log(require("tabs").activeTab.url)
})
require("widget").Widget({
id: "my-panel",
contentURL: "http://www.google.com/favicon.ico",
label: "Test Widget",
panel: panel
});
};
//http://stackoverflow.com/questions/7856282/get-current-url-from-within-a-firefox-addon-panel
exports.main=函数(){
var面板=需要(“面板”)。面板({
contentURL:“数据:文本/html,”,
contentScript:“document.getElementById('b')。onclick=”+
“函数(){”+
“self.port.emit('myEvent');”+
"}"
});
panel.port.on(“myEvent”,function()){
log(需要(“选项卡”).activeTab.url)
})
require(“widget”).widget({
id:“我的小组”,
内容URL:“http://www.google.com/favicon.ico",
标签:“测试小部件”,
面板:面板
});
};
我认为您可以使用firefox本地对象:
var url = gBrowser.contentDocument.location;
&您是否尝试过
警告URL???错误消息显示您正在运行未经授权的代码(尝试3通常是正确的方法)。不允许非特权代码访问浏览器的用户界面,句号。如果你解释你是如何运行这段代码的,有人可能会告诉你为什么它是非特权的。是的,它确实指的是面板模块。但是,您提供的这行代码会导致与content-proxy.js文件相关的大量错误,即使我将其放在主插件的代码中。你能告诉我你将如何使用它来获取当前的url吗?@ChrisKohout:更具体地描述“一系列错误”可以帮助你现在回答;如果没有它,我将不得不在插件生成器中尝试我的代码(稍后)。谢谢,我感谢您的努力。因此,我将您的“self.port.emit('myEvent');”添加到我的内容页url中(因为其中包含我需要用url填充的textarea),但这会生成一个“self.port未定义”错误。@ChrisKohout:我不知道您的代码有什么问题(您没有重新定义“self”,是吗?),但您可以用我发布的代码检查差异(如果它对您有效)来解决它。不,只是:self.port.emit('myEvent');它需要自动执行(不是在按钮中),所以我也在body onLoad中尝试了它,没有骰子。
var url = gBrowser.contentDocument.location;