【问题标题】:Chrome Extension Response from Content Script is Undefined来自内容脚本的 Chrome 扩展响应未定义
【发布时间】:2016-01-02 12:35:11
【问题描述】:

我有一个简单的 Chrome 扩展程序,代码如下。单击弹出窗口中的按钮时,我想从用户浏览器选项卡中复制选定的文本。

问题:从我的内容脚本 selection.js 返回的所有响应都是未定义的

任何帮助将不胜感激:)

manifest.json

{
  "manifest_version": 2,

  "name": "Selected Text",
  "description": "copying your highlighted text",
  "version": "0.1",

  "browser_action": {
   "default_title": "Selected Text",
   "default_icon": "icon.png",
   "default_popup": "popup.html"
  },
  "permissions": [
   "tabs",
   "<all_urls>"
   ],
   "content_scripts": [
    {
     "matches": ["<all_urls>"],
     "js": ["selection.js"],
     "run_at": "document_start",
     "all_frames": true
    }
   ]
}

popup.html

<!doctype html>
<html>
  <head>
    <title>Selected Text</title>
    <script src="popup.js"></script>
  </head>
  <body>
    <h1>Selected Text</h1>
    <p id="text">Not Selected</p>
    <button id="checkPage">Copy Highlighted Text!</button>
  </body>
</html>

popup.js

function getSelectedText() {
  chrome.tabs.getSelected(null, function(tab) {
    chrome.tabs.sendRequest(tab.id, {method: "getSelection"}, function(response) {
      // PROBLEM: response is always undefined
      var text = response.data;
      document.getElementById("text").innerHTML = text;                                              
    });
  });                
};

document.addEventListener('DOMContentLoaded', function() {
  var checkPageButton = document.getElementById('checkPage');
  checkPageButton.addEventListener('click', function() {
    getSelectedText();
  }, false);
}, false);

selection.js

chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
  if (request.method == "getSelection")
    sendResponse({data: window.getSelection().toString()});
  else
    sendResponse({}); // snub them.
});

【问题讨论】:

  • 1.首先要做的是debug 扩展:在内容脚本的消息侦听器中设置断点,然后单步执行弹出代码。 2. 尝试用现代的sendMessagequery({active: true, currentWindow: true}, ... 替换已弃用的sendRequestgetSelected 方法(参见chrome.tabs API)。您可能还想使用推荐的chrome.runtime 而不是chrome.extension
  • 感谢您的提示。我有一些需要专注的有偿工作,但我会在有机会时再次回到这个工作并更新

标签: javascript google-chrome google-chrome-extension content-script


【解决方案1】:

请记住,在更改代码以同时执行以下操作时:

  1. 重新加载您的扩展程序(在 chrome://extensions 页面中)
  2. 刷新您正在测试的网站页面(即 Ctrl + R)

似乎内容脚本只会通过执行 2) 刷新,而弹出窗口会通过 1) 刷新。

【讨论】:

    猜你喜欢
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    • 2018-06-21
    相关资源
    最近更新 更多