Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 来自内容脚本的Chrome扩展响应未定义_Javascript_Google Chrome_Google Chrome Extension_Content Script - Fatal编程技术网

Javascript 来自内容脚本的Chrome扩展响应未定义

Javascript 来自内容脚本的Chrome扩展响应未定义,javascript,google-chrome,google-chrome-extension,content-script,Javascript,Google Chrome,Google Chrome Extension,Content Script,我有一个简单的Chrome扩展,代码如下。单击弹出窗口中的按钮时,我希望从“用户浏览器”选项卡复制所选文本 问题:从my Content Script selection.js返回的所有响应都未定义 任何帮助都将不胜感激:) manifest.json { "manifest_version": 2, "name": "Selected Text", "description": "copying your highlighted text", "version": "0.1"

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

问题:从my Content Script 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
    }
   ]
}
selection.js

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

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

  • 重新加载扩展插件(在chrome://extensions 第页)
  • 刷新您正在测试的网站页面(即Ctrl+R)

  • 似乎只有执行2)才能刷新内容脚本,而弹出窗口将刷新1)。

    1。要做的第一件事是扩展:在内容脚本的消息侦听器内设置一个断点,然后单步执行弹出代码。2.尝试用现代的
    sendMessage
    query({active:true,currentWindow:true},
    )替换不推荐的
    sendRequest
    getSelected
    方法(请参见API)。您可能还想使用推荐的
    chrome.runtime
    而不是
    chrome.extension
    ,谢谢您的提示。我有一些有报酬的工作需要关注,但我会再次关注,并在有机会时更新
    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);
    
    chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
      if (request.method == "getSelection")
        sendResponse({data: window.getSelection().toString()});
      else
        sendResponse({}); // snub them.
    });