browser.runtime.connectNative()不适用于Firefox和JS

时间:2019-02-03 07:51:52

标签: javascript firefox-addon firefox-webextensions

我想为Firefox(和Chrome,但以后)做一个扩展,以便能够向用户PC上安装的python程序发送命令。

因此,我在互联网上进行搜索,并找到了browser.runtime.connectNative()On this page的解决方案。

我遵循了本教程,但是没有结果。同样,当用户单击扩展图标时打开的设置窗口不会运行文件中的JS。

这是manifest.json权限和窗口的一部分:(我可能忘记了一些东西)

   pws.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            checkBoxLower.setChecked(hasLowerCase(charSequence.toString()));
            checkBoxUpper.setChecked(hasUpperCase(charSequence.toString()));
            checkBoxNumber.setChecked(hasNumber(charSequence.toString()));
        }

        @Override
        public void afterTextChanged(Editable editable) {

        }

        private boolean hasLowerCase(String s){
            return !s.equals(s.toUpperCase());
        }

        private boolean hasUpperCase(String s){
            return !s.equals(s.toLowerCase());
        }

        private boolean hasNumber(String s){
            return s.matches(".*\\d+.*");
        }

    });

这些是main.js的第22至46行:

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

这是settings.html(不适用于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);
        }
    }
}

暂时很简单,但是没有用...

用于接收请求的程序是python程序,它没有任何错误,因此我不会超载消息。

当我使用web-ext时,出现此错误:

<!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程序通信吗?

您还能告诉我settings.html文件出了什么问题吗?

谢谢

0 个答案:

没有答案