javascript - 如何从弹出的 DOM 中读取数据

标签 javascript jquery html google-chrome google-chrome-extension

我制作了一个非常简单的 Chrome 扩展程序,其中应该发生的是用户可以在文本框中输入一个值,按下按钮,然后将输入的值填充到页面文本框(或任何其他元素)中。

所以,我有

popup.html:

<!doctype html>
<html>
  <head>
    <title>Getting Started Extension's Popup</title>
    <script src="popup.js"></script>
  </head>
  <body>
    <textarea type="text" id="data-details" cols="40" rows="5"></textarea>
    <input type="button" id="btn-fill" value="Fill" />
  </body>
</html>

popup.js:

document.addEventListener('DOMContentLoaded', function () {
    document.getElementById("btn-fill").addEventListener("click", injectTheScript);
});

function injectTheScript() {
    chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
        chrome.tabs.executeScript(tabs[0].id, { file: "content_script.js" });
    });
}

content_script.js:

function fillElements()
{
    var dataDetailsStr = document.getElementById("data-details").value;

// error here : Uncaught TypeError: Cannot read property 'value' of null

    document.getElementById("txt-page-input").value = dataDetailsStr;

}

fillElements();

manifest.json:

{
  "manifest_version": 2,
  "name": "Fill Data",
  "description": "Fills data on the page",
  "version": "1.0",

  "permissions": [
    "activeTab",
    "http://*/*"
  ],
  "browser_action": {
    "default_icon": "img/icon.png",
    "default_popup": "popup.html"
  },
  "content_scripts": [{
    "matches": ["http://*/*"],
    "js": ["jquery.js", "content_script.js"]
   }]
}

document.getElementById ("data-details") 始终返回 null。如何访问这个元素,或者如何正确编写这个元素?我是新手。

最佳答案

问题在于 document.getElementById("data-details") 位于注入(inject)的脚本中,并且浏览器搜索具有 id data-details 的对象在页面中,而不是在 popup.html 中 所以

popup.js

document.addEventListener('DOMContentLoaded', function () {
    document.getElementById("btn-fill").addEventListener("click", injectTheScript);
});

function injectTheScript() {
    chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
        chrome.tabs.executeScript(tabs[0].id, { file: "content_script.js" });
        chrome.tabs.sendMessage(tabs[0].id, document.getElementById("data-details").value);
    });
}

content_script.js

function fillElements()
{
    chrome.runtime.onMessage.addListener(function(message) {
         document.getElementById("txt-page-input").value = message;
    });


}

fillElements();

关于javascript - 如何从弹出的 DOM 中读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42678531/

相关文章:

javascript - 使用名称属性 jQuery 从下拉列表中获取选定的文本

jQuery/CSS 偏移+鼠标移动问题

javascript - 在不同文件之间将数据从 php 发送到 javascript

javascript - 使用 jQuery 检查框架是否存在

javascript - 如何获取iframe对象的来源

html - css - 如何通过其 id 更改图像源?

javascript - 如何从一组标签中抓取数据内容?

javascript - 具有 PhoneGap + Firebase 身份验证问题的混合应用

javascript - 使用 javascript 从图像数组更改 img 标签 src。骰子游戏

Javascript 字符串替换 : Can we use a string as the first argument (for speed) but "match globally"?