javascript - 如何解决从网页向 Chrome 扩展程序发送数据的问题?

标签 javascript google-chrome-extension

我正在尝试将数据从我的网页传递到 chrome 扩展程序。

manifest.json(我尝试先在我的本地环境中执行此操作)

  "externally_connectable": {
    "matches": ["*://localhost/*"]
  }

在 listen.js(后台脚本)中:

chrome.runtime.onMessageExternal.addListener(
  function(request, sender, sendResponse) {
    if (sender.url == blacklistedWebsite)
      return;  // don't allow this web page access
    if (request.openUrlInEditor)
        alert('test2');
        alert(request.openUrlInEditor);
  });

上面没有显示任何警报。

当我导航到 chrome://extensions/时,我通过查看 ID 获得了解压后的 chrome 扩展的扩展 ID。在我本地主机环境的网页中

// DEVELOPMENT extension ID
var editorExtensionId = "fppgjikaoolnlcmdjalbfkmlcadcckmb";

var url = 'test';
// Make a simple request:
chrome.runtime.sendMessage(editorExtensionId, {openUrlInEditor: url},
  function(response) {
    if (!response.success)
      handleError(url);
  });

当我运行它时。在浏览器中,我收到一条错误消息:

Error in event handler for (unknown): TypeError: Cannot read property 'success' of undefined

我不确定从哪里开始调试它。

最佳答案

在对您的代码进行一些更改后,我能够实现您的目标。

完整代码见下方。

manifest.json

{
  "manifest_version": 2,
  "name": "CS to Bg Communication",
  "version": "0.1",
  "background": {
    "scripts": ["listen.js"]
  },
  "content_scripts": [
    {
      "all_frames" : true,
      "matches": ["<all_urls>"],
      "js": ["contentscript.js"]
    }
  ],
  "browser_action": {
    "default_popup": "popup.html"
  },
  "externally_connectable": {
    "matches": ["*://localhost/*"]
  }
}

listen.js - the background script

chrome.runtime.onMessageExternal.addListener(
  function(request, sender, sendResponse) {
    blacklistedWebsite = 'http : / / yourdomain . com /';
    if (sender.url == blacklistedWebsite)
      return;  // don't allow this web page access
    if (request.openUrlInEditor) {
        alert('test2 - ' + request.openUrlInEditor);
        sendResponse({"success": true, "AckFromBG": "I have received your messgae. Thanks!"}); // sending back the acknowlege to the webpage
    }
});

contentscript.js - the content script - actually does nothing

console.log("this is content script");

web-page.html - The local web page

<html>
    <body>

        This page will will send some message to BG script

        <script type="text/javascript">
            // DEVELOPMENT extension ID
            var editorExtensionId = "fjaedjckfjgifecmgonfmpaoemochghb"; // replace with your extension ID
            var url = 'test';
            chrome.runtime.sendMessage(editorExtensionId, {openUrlInEditor: url}, function(response) {
                console.log(response);
                if (!response.success)
                    handleError(url);
            });
            function handleError(url) {
                console.log(url);
            }
        </script>
    </body>
</html>

变更摘要:

  • 已定义 blacklistedWebsite - 这是未定义的。

  • 添加了sendResponse({"success": true, "AckFromBG": "我已经收到 你的消息。谢谢!”}); 将确认发送回 网页。

  • 定义 函数 handleError(url) { 控制台日志(网址); 这没有定义。

就是这样。希望这会解决您的问题。

关于javascript - 如何解决从网页向 Chrome 扩展程序发送数据的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49989246/

相关文章:

javascript - 使用 e.preventDefault() 后如何将 href 链接返回到它的默认行为;?

javascript - Angular : Why does field $invalid is true in other view?

google-chrome - 在Chrome中为自定义搜索引擎添加建议URL

linux - 构建 Google Chrome NaCl 应用程序 .nexe 文件时找不到有效的库

javascript - 使用来自 javascript 的输出 base64 创建 qrCode

javascript - 到达页面顶部时删除类吗?

javascript - 检查并计算选中复选框的数量

javascript - Chrome 扩展程序臃肿的背景页面

node.js - DDP、Node 和 Chrome Browserify

css - 用于在特定站点上导入 CSS 文件的浏览器扩展