【GOOGLE插件】chrome.runtime.sendNativeMessage与本地应用交互
manifest.json
{
"manifest_version": 2,
"name": "202502271738",
"description": "",
"version": "0.9.9",
"permissions": [
"activeTab",
"tabs",
"storage",
"commands",
"nativeMessaging"
],
"background": {
"scripts": ["background.js"],
"persistent": false
}
}
background.js
document.addEventListener('DOMContentLoaded', function () {
chrome.runtime.sendNativeMessage('com.example12.nativeapp',{ "message": "Hello from Chrome" },(response) => {
if (chrome.runtime.lastError) {
alert('Error: ' + chrome.runtime.lastError.message);
} else {
alert('Response: ' + JSON.stringify(response));
}
});
})
com.examp.nativeapp.json
{
"name": "com.example12.nativeapp",
"description": "Native messaging host for python app",
"path": "c.bat",
"type": "stdio",
"allowed_origins": [
"chrome-extension://nfdljdonlekonbbjemmdjaljiahfeddj/"
]
}
c.bat
@echo off
python cc.py
cc.py
import json
import sys
def read_message():
"""从标准输入读取消息"""
raw_length = sys.stdin.buffer.read(4)
if not raw_length:
return None
message_length = int.from_bytes(raw_length, byteorder='little')
message = sys.stdin.buffer.read(message_length).decode('utf-8')
return json.loads(message)
def write_message(message):
"""将消息写入标准输出"""
message_json = json.dumps(message).encode('utf-8')
message_length = len(message_json).to_bytes(4, byteorder='little')
sys.stdout.buffer.write(message_length)
sys.stdout.buffer.write(message_json)
sys.stdout.buffer.flush()
def main():
"""主函数,处理消息通信"""
received_message = read_message()
if received_message:
print(f"收到来自 Chrome 插件的消息: {received_message.get('message')}")
response = {"message": "Hello from Python!"}
write_message(response)
else:
print("未接收到消息")
if __name__ == "__main__":
main()
注册表路径
计算机\HKEY_CURRENT_USER\SOFTWARE\Google\Chrome\NativeMessagingHosts\com.example12.nativeapp
名称:默认
类型:REG_SZ
数据:com.examp.nativeapp.json文件所在的路径
测试
只要一加载插件,就会和本地的应用交互,弹出{“message”: “Hello from Python!”}