Chrome Native Messaging-手动执行主机

时间:2019-03-02 14:44:47

标签: python google-chrome firefox flask chrome-native-messaging

我正在尝试使用可以与Web API交互的本机消息创建Web扩展。所以这个想法是,当有人通过API发送消息时,扩展程序也会收到它。

我遵循firefox example的步骤。到目前为止一切顺利,我已经能够在主机和扩展之间进行通信。

这是我使用flask框架的主机代码:

import json
import sys
import struct
import threading
import os
from flask import Flask, request, jsonify, Response, abort


# Read a message from stdin and decode it.
def get_message():
    raw_length = sys.stdin.read(4)
    if not raw_length:
        sys.exit(0)
    message_length = struct.unpack('=I', raw_length)[0]
    message = sys.stdin.read(message_length)
    return json.loads(message)


# Encode a message for transmission, given its content.
def encode_message(message_content):
    encoded_content = json.dumps(message_content)
    encoded_length = struct.pack('=I', len(encoded_content))
    return {'length': encoded_length, 'content': encoded_content}


# Send an encoded message to stdout.
def send_message(encoded_message):
    sys.stdout.write(encoded_message['length'])
    sys.stdout.write(encoded_message['content'])
    sys.stdout.flush()


def get_message_background():
    while True:
        message = get_message()
        if message == "ping":
            send_message(encode_message("pong"))


thread = threading.Thread(target=get_message_background)
thread.daemon = True
thread.start()


app = Flask(__name__)


@app.route("/test", methods=['GET'])
def test():
    send_message(encode_message('testing'))
    return 'testing'


app.run('localhost', 5001, debug=True)

使用此代码,我会收到ping并响应一个pong。

问题是当我尝试在终端上运行该代码时。 本机消息传递通过stdio进行通信,当我在终端上运行脚本时,终端成为标准输入和输出。

如果我只是加载扩展名,烧瓶将无法启动。

有人解决了这个问题吗?

PS:对不起,我的英语

0 个答案:

没有答案