我正在尝试使用可以与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:对不起,我的英语