Javascript 如何解决将数据从网页发送到chrome扩展的问题?

Javascript 如何解决将数据从网页发送到chrome扩展的问题?,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我正在尝试将数据从我的网页传递到chrome扩展 json我正在尝试首先在本地环境中执行此操作 "externally_connectable": { "matches": ["*://localhost/*"] } 在listen.js的背景脚本中: chrome.runtime.onMessageExternal.addListener( function(request, sender, sendResponse) { if (sender.url == bl

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

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);
  });
上面没有显示任何警报

我通过在导航到时查看ID来获得未打包chrome扩展的扩展IDchrome://extensions/. 在本地主机环境中的我的网页中

// 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

contentscript.js——内容脚本——实际上什么都不做

web-page.html-本地网页

更改摘要:

已定义blacklistedWebsite-这是未定义的

添加了sendResponse{success:true,AckFromBG:I已收到 您的邮件。谢谢!};将确认发送回 网页

定义函数handleErrorurl{ console.logurl; }这是没有定义的


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

在代码中做了一些更改后,我就能实现您的目标

请参阅下面的完整代码

manifest.json

contentscript.js——内容脚本——实际上什么都不做

web-page.html-本地网页

更改摘要:

已定义blacklistedWebsite-这是未定义的

添加了sendResponse{success:true,AckFromBG:I已收到 您的邮件。谢谢!};将确认发送回 网页

定义函数handleErrorurl{ console.logurl; }这是没有定义的


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

您收到的错误表明已执行chrome.runtime.sendMessage。这意味着外部消息已正确设置:否则,chrome.runtime.sendMessage将不会暴露于页面的代码中

我认为问题在于:

if (sender.url == blacklistedWebsite)
  return;  // don't allow this web page access
我怀疑问题在于blacklistedWebsite未定义;代码失败,出现ReferenceError,并且没有发送有意义的响应。由于onMessage侦听器即使出现错误也会终止,因此调用代码将获得未定义的响应

检查您的计算机以确认是否存在这种情况;如果已复制但未使用此黑名单功能,请删除此分支


将来,请确保您了解您复制的每一行代码的用途

您收到的错误表明chrome.runtime.sendMessage已执行。这意味着外部消息已正确设置:否则,chrome.runtime.sendMessage将不会暴露于页面的代码中

我认为问题在于:

if (sender.url == blacklistedWebsite)
  return;  // don't allow this web page access
我怀疑问题在于blacklistedWebsite未定义;代码失败,出现ReferenceError,并且没有发送有意义的响应。由于onMessage侦听器即使出现错误也会终止,因此调用代码将获得未定义的响应

检查您的计算机以确认是否存在这种情况;如果已复制但未使用此黑名单功能,请删除此分支


将来,请确保您了解您复制的每一行代码的用途

一,。localhost3000是打字错误吗?请不要输入端口号。2.警报“test1”;函数参数内部有语法错误,请确保您知道,3。如果扩展被禁用,响应也可能是未定义的,因此您不应该假定它始终存在。@wOxxOm我还更改了示例以匹配中的内容,但仍然会得到相同的错误。您在console.log中看到了哪些错误?还可以尝试将警报替换为console.log,并查看它是否有用1。localhost3000是打字错误吗?请不要输入端口号。2.警报“test1”;函数参数内部有语法错误,请确保您知道,3。如果扩展被禁用,响应也可能是未定义的,因此您不应该假定它始终存在。@wOxxOm我还更改了示例以匹配中的内容,但仍然会得到相同的错误。您在console.log中看到了哪些错误?还可以尝试将警报替换为console.log,看看是否有帮助
console.log("this is content script");
<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>
if (sender.url == blacklistedWebsite)
  return;  // don't allow this web page access