Javascript 通过Chrome应用程序(非扩展)使用内容脚本/消息发送数据

Javascript 通过Chrome应用程序(非扩展)使用内容脚本/消息发送数据,javascript,google-chrome,google-chrome-app,content-script,message-passing,Javascript,Google Chrome,Google Chrome App,Content Script,Message Passing,所以我一直在尝试将数据从网页发送到Chrome应用程序(而不是Chrome扩展)。根据我的理解,这主要需要从网页调用Chrome应用程序,将JS注入网页和/或Chrome应用程序与网页之间的通信 另外,从其.crx安装的应用程序,否则加载未打包目录会导致此错误: content\u脚本仅允许用于扩展和旧式打包应用,但这是打包应用 现在,我尝试在所需的站点中注入JS。但是,在使用Chrome开发工具进行检查时,该站点的源代码->内容脚本部分中没有此类条目。在使用Chrome应用程序时,它只是没有注

所以我一直在尝试将数据从网页发送到Chrome应用程序(而不是Chrome扩展)。根据我的理解,这主要需要从网页调用Chrome应用程序,将JS注入网页和/或Chrome应用程序与网页之间的通信

另外,从其
.crx
安装的应用程序,否则加载未打包目录会导致此错误:

content\u脚本
仅允许用于扩展和旧式打包应用,但这是打包应用

现在,我尝试在所需的站点中注入JS。但是,在使用Chrome开发工具进行检查时,该站点的
源代码->内容脚本部分中没有此类条目。在使用Chrome应用程序时,它只是没有注入自身。它与扩展完美结合,但我想使用Chrome应用程序实现其他功能

作为一种替代方法,我寻找了一些例子,其中提到了它的用法:

“…您的应用程序或扩展可以接收和响应来自常规网页的消息。”

但是,不知何故,我无法让它工作。
这两种方法都有头吗?其他建议

manifest.json:

{
  "name": "App",
  "version": "1.0",
  "manifest_version": 2,
  "minimum_chrome_version": "31",
  "app": {
    "background": {
      "scripts": ["background.js"]
    }
  },
  "permissions": [
    {"fileSystem": ["write", "retainEntries", "directory"]},
    "storage",
    "http://example.com/*"
  ],
  "externally_connectable": {
    "matches": ["http://example.com/*"]
  },
  "content_scripts": [{
    "matches": ["http://example.com/*"],
    "js": ["content.js"]
  }]
}

事实上,应用程序中不能有内容脚本

然而,这是有效的

您已经声明要从
example.com
进行外部连接。(注意:定义匹配模式时要小心,例如此模式不包括
www.example.com

example.com
自己的脚本中,可以包含以下内容:

chrome.runtime.sendMessage("idOfYourAppHere", message, function(response) {
  /* ... */
});
在应用程序(可能是它的背景脚本)中,你可以用

chrome.runtime.onMessageExternal.addListener(function(message, sender, sendResponse) {
  /* ... */
  sendResponse(response); 
});

这确实需要您提前知道ID。您可以通过打包扩展并从清单中提取扩展来锁定它。有关更多详细信息,请参阅。

谢谢您的提醒。所以内容脚本被完全排除在外。这对我来说是至关重要的信息。另外,前面我已经看过了你提到的代码片段的一个版本。事实上,它起了作用!我想我是在background.js中尝试
console.log()
,但没有打印出来。这次我试着在example.com脚本的回调中打印并完成了#接受:)在类似的行中,如何调试background.js中的内容?您需要打开
background.js
的开发工具。您可以从
chrome://extensions
page,查找应用程序的条目。请注意,后台页面将在空闲时卸载(并丢失所有控制台输出),除非其Dev Tools处于打开状态。
chrome://inspect/#apps
page.啊,明白了!从
chrome://extensions
page它为
background.js
打开控制台。甚至,右键点击Chrome应用程序本身也可以选择“查看背景页面”。感谢您通知
chrome://inspect/#apps
第页。