browser.runtime.connectNative () не работает с Firefox и JS - PullRequest
0 голосов
/ 03 февраля 2019

Я хочу сделать расширение для Firefox (и Chrome, но после), которое сможет отправлять команды программе на python, установленной на ПК пользователя.

Поэтому я искал в Интернетеи нашел решение с browser.runtime.connectNative () На этой странице .

Я следовал учебному пособию, но результатов не было.Кроме того, окно настроек, которое открывается, когда пользователь нажимает на значок расширения, не запускает JS, который находится в файле.

Это часть разрешений и окна manifest.json: (Возможно, я забылчто-то)

"permissions": [
    "activeTab",
    "nativeMessaging"
  ],
"browser_action": {
    "default_icon": "icon48.png",
    "default_title": "WTP",
    "default_popup": "settings.html"
  },

Это строки с 22 по 46 из main.js:

var links = document.getElementsByTagName("a");
var result = "";
for (var l = 0; l < links.length; l++){
    var lienActuel = links[l].href;
    if (lienActuel.substring(0, 6) == "wtp://") {
        // Maintenant on prépare l'envoi de la commande au serveur local
        var request = new XMLHttpRequest();
        var commande = "=cmd rechercher nom "+encodeURIComponent(lienActuel.substring(6));
        var port = browser.runtime.connectNative("wtp_bridge");
        //Listen for messages from the app.
        port.onMessage.addListener((response) => {
            console.log("Received: " + response);
            port.disconnect();
        });
        port.postMessage(commande);
        alert("Sent : "+commande);
        if (result.substring(0, 15) == "=cmd SUCCESS : ") {
            alert("SHA : "+result.substring(16));
            document.getElementsByTagName("a")[0].href = result.substring(16);
        }
        else{
            alert(result);
        }
    }
}

Это файл settings.html (окно, которое не работает с js):

<!DOCTYPE html>
<html>
<head>
    <title>WTP Settings</title>
</head>
<body>
    <h1>Settings</h1>
    <form>
        <p>
            <input type="checkbox" id="vpn" name="vpn" onclick="showVPN();" ><label for="vpn">Use a VPN</label><br>
            <input type="text" id="ipportvpn" name="ipportvpn" required minlength="10" maxlength="25" size="15" placeholder="IP:Port of the VPN">
            <script type="text/javascript">
                document.getElementById("ipportvpn").style.display = "none";
                function showVPN() {
                    if (vpn.checked) {
                        document.getElementById("ipportvpn").style.display = "block";
                    }
                    else{
                        document.getElementById("ipportvpn").style.display = "none";
                    }
                }
            </script>
        </p>
    </form>
</body>
</html>

На данный момент это очень просто, но не сработало ...

Программа для получения запроса написана на python, и у меня не было никаких ошибок с ней, поэтомуЯ не буду перегружать свое сообщение.

Когда я использую web-ext , у меня появляется эта ошибка:

[firefox/remote.js][debug] Received message from client: {"from":"root","type":"tabListChanged"}
[firefox/index.js][debug] Firefox stderr: JavaScript error: moz-extension://c3e66db6-d90b-4c3e-86c1-8346247f5cdb/main.js, line 30: TypeError: browser.runtime.connectNative is not a function

Не могли бы вы сказать мне, как получить мое расширениедля связи с моей программой на python, пожалуйста?

И не могли бы вы также сказать мне, что не так с файлом settings.html?

Спасибо

...