除了getElementsByTagName之外,getAttribute还没有在chrome扩展js脚本中工作

时间:2014-06-23 12:40:55

标签: javascript google-chrome-extension

我正在拼命尝试制作一个chrome扩展程序,它应该将链接标题保存到数据库中。为此,我创建了以下javascript文件:

mysu.js

var linkTitle;
window.addEventListener('load', function() {
  var urls= document.querySelectorAll('a.url');
  for(i=0,len=urls.length;i<len; i++) {
    urls[i].addEventListener('click', function() {
      chrome.tabs.create({url: this.href});
    }, false);
  }
  var a=document.getElementsByTagName('a');
  for (i=0,len=a.length;i<len;i++) {
    a[i].addEventListener('contextmenu', function() {
      var tmpThis = this;
      var tmpTitle = tmpThis.getAttribute('title').trim();
      alert(tmpTitle);
      var tmpText = tmpThis.textContent.trim();
      var tmpImg = tmpThis.childNodes('img').firstChild;
      if ((tmpTitle != null) && (tmpTitle.length > 0)) {
        linkTitle = tmpTitle;
      } else if ((tmpText != null) && (tmpText.length > 0)) {
        linkTitle = tmpText;
      } else if (tmpImg != null) {
        linkTitle = tmpImg.getAttribute("alt");
      }
    });
  };
}, false);


chrome.contextMenus.create({'title': 'Add to mySU bookmarks', 'contexts': ['link', 'page'], 'onclick': mySUBookmark});

function mySUBookmark() {
 alert(linkTitle);
}

当然,我首先尝试使用alert()进行调试。但是,无论我做什么,我都会得到一个未定义的。我试图从另一个扩展中复制此行为,我知道这样做。我错过了什么?

此致

ķ。

PS:以下是我的清单文件,如果它有帮助:

的manifest.json

{
  "name" : "mySU",
  "description" : "mySU",
  "browser_action": {
    "default_icon": "images/mysu.png",
    "default_popup": "html/mysu.html",
    "default_title": "Select page to navigate to..."
  },
  "permissions": [
    "tabs",
    "contextMenus",
    "storage",
    "http://mysu.sabanciuniv.edu/*",
    "http://*.sabanciuniv.edu/*"
  ],
  "background": {
    "scripts": ["js/mysu.js"]
  },
  "icons": {
    "128": "images/mysu.png"
  },
  "version": "1.0",
  "minimum_chrome_version": "9",
  "manifest_version": 2
}

1 个答案:

答案 0 :(得分:0)

我假设你想在触发上下文菜单项的网页的上下文中执行代码的第一部分。

这不会发生:它在不可见的空背景页面的上下文中执行。

阅读Context Scripts上的文档,了解如何操作。您可以将其放入js文件中,并将其注入触发上下文菜单的选项卡中。

或者,查看上下文菜单的onclick处理程序提供的info对象:

function mySUBookmark(info, tab) {
  console.log(info);
}

这可能会提供您无需额外代码即可获得的内容。虽然,maybe not