无法获取标签网址 - Chrome扩展程序

时间:2015-03-15 05:22:09

标签: javascript google-chrome-extension

在阅读了与此问题相关的各种其他帖子后,我仍然无法找到检索当前页面网址的方法。它要么不返回任何内容,“undefined”或“chrome:// extensions /”。

我的代码如下......

Sample.js

var url = [];

chrome.tabs.query({'active': true, 'lastFocusedWindow': true}, function (tabs) {
    url = tabs[0].url;
});

var submitLink = chrome.contextMenus.create(
{
    "title": "Submit " + url
});

的manifest.json

{
  "name": "some name",
  "description": "some description",
  "version": "0.6",
  "permissions": ["tabs","contextMenus"],
  "background": {
    "scripts": ["sample.js"]
  },
  "manifest_version": 2
}

有没有人有任何想法我无法获取网址? 我读到某处是因为chrome.tabs.query函数是异步的,因此chrome.contextMenus.create在chrome.tabs.query检索到URL之前执行。我对javascript的经验不多,所以我不确定如何解决这个问题。

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

var url = [];
var submitLink;

chrome.tabs.query({'active': true, 'lastFocusedWindow': true}, function (tabs) {
    url = tabs[0].url;
    submitLink = chrome.contextMenus.create({
      "title": "Submit " + url}
    );    
});

答案 1 :(得分:0)

你的代码没什么意义。

Chrome启动后立即执行后台网页代码。一旦。因此,您获得的网址最多只是当时打开的网页。

此外,所有标签共享上下文菜单;把特定的URL放在那里会很奇怪。您需要根据当前标签/网址不断更新菜单,例如"提交此页面"。

建议:不要这样做。在那一点上,它真的是不必要的复杂性。如果需要,请创建一个确认对话框,但保持上下文菜单项不变。


但是如果你绝对必须这样做,你需要挂钩来自tabs API的事件,比如使用onActivated更改有效标签并使用onUpdated / {{1更改网址}}。它会很复杂,但可以完成。