getAttribute除了getElementsByTagName不工作在chrome扩展js脚本

getAttribute in addition to getElementsByTagName not working in a chrome extension js script

本文关键字:chrome 扩展 js 脚本 工作 除了 getElementsByTagName getAttribute      更新时间:2023-09-26

我拼命想做一个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()进行调试。然而,无论我做什么,我得到一个未定义。我试图从另一个扩展复制这种行为,我知道这样做。我错过了什么?

问候,

k .

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
}

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

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

阅读关于上下文脚本的文档来了解如何这样做。你可以把它放到一个js文件中,然后注入到触发上下文菜单的选项卡中。

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

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

这可能不需要额外的代码就能满足您的需求。不过,也许不是。