Chrome.runtime.connectNative from an external URL

I have a Google Chrome extension that contains the following two files ...

manifest.json

{
    "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcBHwzDvyBQ6bDppkIs9MP4ksKqCMyXQ/A52JivHZKh4YO/9vJsT3oaYhSpDCE9RPocOEQvwsHsFReW2nUEc6OLLyoCFFxIb7KkLGsmfakkut/fFdNJYh0xOTbSN8YvLWcqph09XAY2Y/f0AL7vfO1cuCqtkMt8hFrBGWxDdf9CQIDAQAB",
    "name": "Native Messaging Example",
    "version": "1.0",
    "manifest_version": 2,
    "description": "Send a message to a native application.",
    "app": {
        "launch": {
            "local_path": "index.html"
        }
    },
    "icons": {
        "128": "icon-128.png"
    },
    "permissions": [
        "nativeMessaging"
    ],
    "externally_connectable": {
        "matches": ["*://*.chrome-extension.com/*"]
    },
    "background": {
        "scripts": ["background.js"]
    }
}

background.js

var sendResponseCallBack;

chrome.runtime.onMessageExternal.addListener(
    function(request, sender, sendResponse) {
        sendResponseCallBack = sendResponse;
        var message = {"comment": '*** ' + request['comment'] + ' ***'};
        var useNative = false;
        if (useNative) {
            connect();
            sendNativeMessage(message);
        }
        else {
            sendResponseCallBack(message);
        }
    }
);
function connect() {
    var hostName = "com.google.chrome.example.echo";
    port = chrome.runtime.connectNative(hostName);
    port.onMessage.addListener(onNativeMessage);
    port.onDisconnect.addListener(onDisconnected);
}
function sendNativeMessage(message) {
    port.postMessage(message);
}
function onNativeMessage(message) {
    port.disconnect();
    sendResponseCallBack(message);
}

I also configured the virtual host: chrome-extension.com to access the URL from the local server:

http://www.chrome-extension.com/

If the Chrome extension is on and on, if I get access to:

http://www.chrome-extension.com/

and a variable useNative = false, then I get a response from the plugin through:, sendResponseCallBack(message);but if useNative = true, then I do not get any response from the plugin, I get:, undefinedas well as my own operation, which should take about 5 seconds, does not work, because the answer undefinedreturns after 0 seconds .

I also included another page htmlthrough which I access through the extension URL:

://knldjmfmopnpolahpmmgbagdohdnhkik/calc-with-os.html

calc-with-os.js, : connect() sendNativeMessage(message) onNativeMessage(message), : chrome.runtime.connectNative , .

, URL?

[EDIT: TRY NUMBER 2]

: @wOxxOm , , , .

?

var port = null;
var sendResponseCallBack;

chrome.runtime.onMessageExternal.addListener(
    function(request, sender, sendResponse) {
        sendResponseCallBack = sendResponse;
        connect(request);
    }
);
function connect(request) {
    chrome.runtime.onConnect.addListener(function(p){
        port = p;
        port.onMessage.addListener(onNativeMessage);
        port.onDisconnect.addListener(onDisconnected);
        var message = {"comment": '*** ' + request['comment'] + ' ***'};
        sendNativeMessage(message);
    });
    var hostName = "com.google.chrome.example.echo";
    chrome.runtime.connectNative(hostName);
}
function sendNativeMessage(message) {
    port.postMessage(message);
}
function onNativeMessage(message) {
    port.disconnect();
    sendResponseCallBack(message);
}
+4

Source: https://habr.com/ru/post/1683641/


All Articles