我想为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文件出了什么问题吗?
谢谢