如何在 Chrome 扩展中获取 javascript 中的 HTML 元素

How to get HTML element in javascript in Chrome Extension

已更新

我想使用 Javascript 在 chrome 扩展中获取当前选项卡 (url ) 的特定 html 元素的值。喜欢

document.getElementById("productTitle").value;

这是我的 javascript 代码

background.js

function sendCurrentTitle(title) {
  var req = new XMLHttpRequest();
  req.addEventListener('readystatechange', function (evt) {
    if (req.readyState === 4) {
      if (req.status === 200) {
        alert('Saved !');
      } else {
        alert("ERROR: status " + req.status);
      }
    }
  });
  req.open('POST', 'http://url/a.php', true);
  req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  req.send('url=' + title);
}

chrome.browserAction.onClicked.addListener(function (tab) {
  
chrome.tabs.query({active: true}, function(tabs) {
      sendCurrentTitle(document.getElementById("productTitle").value);
});


});

manifest.json

{
  "manifest_version": 2,
  "name": "Test Extension",
  "version": "0.0",

  "background": {
    "persistent": false,
    "scripts": ["background.js"]
  },

"browser_action": {},

  "permissions": [
    "activeTab",
    "tabs", 
    "<all_urls>"
  ]
}

我想从 this 页面获取产品标题并将其发送到 php api。 我收到此错误

Error handling response: TypeError: Cannot read property 'value' of null

你可以得到一个带有查询选择器的 html 元素或 DOM:-

document.querySelector(element);
document.getElementByID(elementID);
document.getElementByClassName(className);

或者你也可以通过onclick属性来实现:-

<button onclick="fun"></button>
<script>
      function(fun){
      
      }
</script>

您的扩展脚本在单独的 window 中运行,因此它无法通过自己的文档对象访问 DOM 其他页面。您需要在扩展清单中指定选项卡权限,并将一些 javascript 注入页面本身

chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.tabs.executeScript(tab.id,{code:   `document.getElementById("productTitle").innerText`},sendCurrentTitle);
});

请注意,您需要在 sendCurrentTitle 中使用 title[0],因为回调会收到一个数组

获取 DOM 内容的最佳方式是使用内容脚本 https://developer.chrome.com/extensions/content_scripts