我正在编写一个 Firefox 插件,当按下工具栏上的插件图标时,它会记录当前的 URL。
按下按钮时,后台脚本将调用本机应用程序。该本机应用程序应将当前 URL 写入 txt 文件。此时,我可以在点击插件按钮时写入文本文件。我能够将在 background.js 中创建的变量的内容写入文本文件。但我无法将当前 URL 传递给后台脚本。
该插件基于 Mozilla 的示例插件: https://github.com/mdn/webextensions-examples/tree/master/native-messaging
使用时
var url = window.location.href;
我获取加载脚本的 URL/位置。
问题:如何将当前URL传递给background.js,以便它将URL写入文本文件?
以下是脚本: 代码background.js:
var url = window.location.href;
/*
On startup, connect to the "ping_pong" app.
*/
var port = browser.runtime.connectNative("ping_pong");
/*
Listen for messages from the app.
*/
port.onMessage.addListener((response) => {
console.log("Received: " + response);
});
/*
On a click on the browser action, send the app a message.
*/
browser.browserAction.onClicked.addListener(() => {
console.log("Console logger");
port.postMessage(url);
});
代码清单.json
{
"description": "ping_pong",
"manifest_version": 2,
"name": "Native messaging start Python",
"version": "1.0",
"icons": {
"48": "icons/message.svg"
},
"browser_specific_settings": {
"gecko": {
"id": "[email protected]",
"strict_min_version": "50.0"
}
},
"background": {
"scripts": ["background.js"]
},
"browser_action": {
"default_icon": "icons/message.svg"
},
"permissions": ["nativeMessaging"]
这是一个老问题,但仍然可以为任何仍然想知道的人解答。
manifest.json
...
"background": {
"scripts": [
"background.js"
]
},
"browser_action": {
"default_icon": "icons/message.svg",
"default_title": "sendURL"
},
"permissions": [
"activeTab"
]
...
背景.js
browser.browserAction.onClicked.addListener( function () {
browser.tabs.query( {
active: true,
currentWindow: true,
windowType: 'normal' // probably unnecessary
} ).then( function ( tab ) {
console.log( tab[ 0 ].url );
}, console.error
);
} );
标题可以是任何内容(也可以什么都没有,这使其成为扩展名)。通常单击操作按钮会调用弹出窗口,但弹出窗口不是必需的。后台可以检测点击并查询当前正常(即不是弹出窗口,不是 devtools)窗口中的活动选项卡。 (可能没有必要指定“正常”,因为无论如何,只有正常窗口才应该获得浏览器操作按钮。)
activeTab
权限允许查询返回 URL。