【GOOGLE插件】chrome.runtime.sendNativeMessage与本地应用交互

发布于:2025-03-14 ⋅ 阅读:(15) ⋅ 点赞:(0)

【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!”}