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扩展-检测URL并执行应用程序_Javascript_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript Chrome扩展-检测URL并执行应用程序

Javascript Chrome扩展-检测URL并执行应用程序,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我知道,使用基本的chrome扩展,我们可以选择扩展可以工作的域(),但是当用户访问特定域时,这是否可以执行应用程序(内部) 我之前看过,看到了“本地消息传递”。(我目前正在学习算术)当我在工作实验室的网站上时,我想让我的扩展自动打开calc.exe 我已经这样做了: manifest.json { "name": "Mon extension", "version": "0.0.1", "background": { "scripts": [ "back

我知道,使用基本的chrome扩展,我们可以选择扩展可以工作的域(
),但是当用户访问特定域时,这是否可以执行应用程序(内部)

我之前看过,看到了“本地消息传递”。(我目前正在学习算术)当我在工作实验室的网站上时,我想让我的扩展自动打开calc.exe

我已经这样做了:

manifest.json

{
    "name": "Mon extension",
    "version": "0.0.1",
    "background": {
        "scripts": [ "background.js" ]
    },
    "browser_action": {
        "default_title": "Ouvrir la calculatrice"
    },
    "permissions": [
        "nativeMessaging"
    ],
    "manifest_version": 2
}
但是我不明白如何管理javascript部分,有人能给我解释一下吗

我的calc.bat的manifest.json:

{
    "name": "application",
    "description": "Lauching my app",
    "path": "C:\\Users\\root\\Documents\\calc.bat",
    "type": "stdio",
    "allowed_origins": [
        "chrome-extension://blfgmcilkaooeokpomhcpnfnhppjklcb"
    ]
}
Calc.bat只是:
@echo off&start Calc.exe


提前谢谢。如果我的问题不够清楚,请告诉我,我会修改它。

无法让您的问题生效,但我链接的示例非常有效,因此开始编辑该示例,最后得出以下结论:

  • 下载
  • 编辑native-messaging-example-host.bat并替换为:

    @回音

    calc.exe

  • 运行install_host.bat

  • 在与主机文件夹相同的目录中创建名为app的文件夹
  • 创建3个文件:background.js、main.js、manifest.json
内容是:

background.js:

chrome.runtime.onMessage.addListener(function(message,sender,sendResponse){
    if (message.action == "open app") {
        chrome.runtime.connectNative("com.google.chrome.example.echo");
    }
});
chrome.runtime.sendMessage({action: "open app"}, function(response) {
    console.log(response);
});
    {
      // Extension ID: knldjmfmopnpolahpmmgbagdohdnhkik
      "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcBHwzDvyBQ6bDppkIs9MP4ksKqCMyXQ/A52JivHZKh4YO/9vJsT3oaYhSpDCE9RPocOEQvwsHsFReW2nUEc6OLLyoCFFxIb7KkLGsmfakkut/fFdNJYh0xOTbSN8YvLWcqph09XAY2Y/f0AL7vfO1cuCqtkMt8hFrBGWxDdf9CQIDAQAB",
      "name": "Native Messaging Example",
      "version": "1.0",
      "manifest_version": 2,
      "description": "Send a message to a native application.",
      "content_scripts": [{
        "js": ["main.js"],
        "matches": ["<all_urls>"]
      }],
      "background": {
        "scripts": ["background.js"]
      },
      "permissions": [
        "nativeMessaging"
      ]
    }
main.js:

chrome.runtime.onMessage.addListener(function(message,sender,sendResponse){
    if (message.action == "open app") {
        chrome.runtime.connectNative("com.google.chrome.example.echo");
    }
});
chrome.runtime.sendMessage({action: "open app"}, function(response) {
    console.log(response);
});
    {
      // Extension ID: knldjmfmopnpolahpmmgbagdohdnhkik
      "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcBHwzDvyBQ6bDppkIs9MP4ksKqCMyXQ/A52JivHZKh4YO/9vJsT3oaYhSpDCE9RPocOEQvwsHsFReW2nUEc6OLLyoCFFxIb7KkLGsmfakkut/fFdNJYh0xOTbSN8YvLWcqph09XAY2Y/f0AL7vfO1cuCqtkMt8hFrBGWxDdf9CQIDAQAB",
      "name": "Native Messaging Example",
      "version": "1.0",
      "manifest_version": 2,
      "description": "Send a message to a native application.",
      "content_scripts": [{
        "js": ["main.js"],
        "matches": ["<all_urls>"]
      }],
      "background": {
        "scripts": ["background.js"]
      },
      "permissions": [
        "nativeMessaging"
      ]
    }
manifest.json:

chrome.runtime.onMessage.addListener(function(message,sender,sendResponse){
    if (message.action == "open app") {
        chrome.runtime.connectNative("com.google.chrome.example.echo");
    }
});
chrome.runtime.sendMessage({action: "open app"}, function(response) {
    console.log(response);
});
    {
      // Extension ID: knldjmfmopnpolahpmmgbagdohdnhkik
      "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcBHwzDvyBQ6bDppkIs9MP4ksKqCMyXQ/A52JivHZKh4YO/9vJsT3oaYhSpDCE9RPocOEQvwsHsFReW2nUEc6OLLyoCFFxIb7KkLGsmfakkut/fFdNJYh0xOTbSN8YvLWcqph09XAY2Y/f0AL7vfO1cuCqtkMt8hFrBGWxDdf9CQIDAQAB",
      "name": "Native Messaging Example",
      "version": "1.0",
      "manifest_version": 2,
      "description": "Send a message to a native application.",
      "content_scripts": [{
        "js": ["main.js"],
        "matches": ["<all_urls>"]
      }],
      "background": {
        "scripts": ["background.js"]
      },
      "permissions": [
        "nativeMessaging"
      ]
    }
{
//扩展ID:KNLDJMFMOPOLAPHPMMGBAGDOHDNHKIK
“密钥”:“migfma0gcsqgsib3dqebaquaa4gnacbiqbgqdcbhwzdvybq6bdpkis9mp4skqcmyxq/a52 jivhzkh4yo/9vjst3oayhspDce9rpocoeqvshshsfrew2nuec6ollyoffxib7kklgsmmfakkut/ffdnjyyy0xotbsn8yvLwqph09xay2y/f0al7vfo1ucqtKmtkT8frbgw9cqdidaqab”,
“名称”:“本机消息传递示例”,
“版本”:“1.0”,
“清单版本”:2,
“说明”:“向本机应用程序发送消息。”,
“内容脚本”:[{
“js”:[“main.js”],
“匹配项”:[“”]
}],
“背景”:{
“脚本”:[“background.js”]
},
“权限”:[
“nativeMessaging”
]
}
最后,安装扩展。尤其是这个,每次打开/加载页面时,都会打开calc.exe,可以通过匹配项轻松更改


另一件需要注意的事情是,如果清单中没有密钥,它似乎不起作用。

如果您正确配置了所有内容,您可以添加一个内容脚本以在您想要的url上运行,使内容脚本将消息发送到后台脚本,并让后台脚本发送本机消息以启动应用程序。谢谢Patrick和juvian。Patrick,是的,我之前添加了正确的注册表项来注册添加“HKCU\Software\Google\Chrome\NativeMessagingHosts\com.Google.Chrome.calc”/ve/t REG\u SZ/d“mypath\\”/f Juvian,你能更精确一点吗?我没有完全理解本地消息传递的原则。你能给我举个例子吗?即使查看stackoverflow也没有帮到我。谢谢你的帮助@juvian:),但现在的问题是,当我添加
“匹配项”:[“”]、
,然后重新加载时,我的扩展生成一个错误:“无法识别的清单键‘匹配’”。如果我将其放在示例中。echo-win我没有任何错误,但calc不会显示。发生这种情况是因为它是一个应用程序吗?清单上没有匹配项,您需要一个内容脚本:我可以称您为“我的主”吗?非常感谢,现在一切都清楚了!我工作得很好!知道这些事情可以通过一个扩展来完成确实很有趣:)