Chrome Native Messaging - запуск хоста вручную - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь создать веб-расширение, используя собственный обмен сообщениями, который может взаимодействовать с веб-API.Поэтому идея в том, что когда кто-то отправляет сообщение через API, расширение также получает его.

Я следую инструкциям примера firefox .Пока все хорошо, я смог установить связь между хостом и расширением.

Вот мой код хоста с использованием фреймворка:

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)

С этим кодом я получаю пинги ответьте на понг.

Проблема в том, когда я пытаюсь запустить этот код на терминале.Нативный обмен сообщениями происходит через stdio, и когда я запускаю свой скрипт на терминале, терминал становится стандартным вводом и выводом.

Если я просто загружаю расширение, колба не запускается.

Кто-то решил эту проблему?

PS: простите за мой английский

...