如何在扩展的本机应用程序中运行Firefox?

时间:2018-08-11 08:42:34

标签: firefox-addon firefox-addon-sdk firefox-webextensions

我正在尝试简单地修改extension example以运行firefox,但出现消息提示:

Firefox is already running,but is no responding. To open a new new window, you must firest close the existing Firefox process, or restart your system.

#!/usr/bin/env python3

import sys
import json
import struct
import subprocess

try:
    # Python 3.x version
    # Read a message from stdin and decode it.
    def getMessage():
        rawLength = sys.stdin.buffer.read(4)
        if len(rawLength) == 0:
            sys.exit(0)
        messageLength = struct.unpack('@I', rawLength)[0]
        message = sys.stdin.buffer.read(messageLength).decode('utf-8')
        return json.loads(message)

    # Encode a message for transmission,
    # given its content.
    def encodeMessage(messageContent):
        encodedContent = json.dumps(messageContent).encode('utf-8')
        encodedLength = struct.pack('@I', len(encodedContent))
        return {'length': encodedLength, 'content': encodedContent}

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

    while True:
        receivedMessage = getMessage()
        if receivedMessage == "ping":
            run_result=subprocess.run('firefox -P firefox_word ',shell=True,stdout=subprocess.PIPE)
            sendMessage(encodeMessage("pong3"))
except AttributeError:
    pass

我的目的是通过扩展程序或扩展程序的本机应用程序打开本地html文件。

2 个答案:

答案 0 :(得分:0)

前一段时间,当我尝试WebExtensions示例时,我遇到了类似的问题。我认为问题出在您的Firefox个人资料上。对我有用的解决方案是创建一个新的配置文件,然后(大约一天后)重新打开以前的配置文件。从那以后一直很好。我不知道有关该问题的更多详细信息。

Mozilla页面"Firefox is already running but is not responding" error message - How to fix it描述了该解决方案以及其他解决方案(我曾尝试过,但没有成功)。

您可以按照以下说明(see here for complete details)启动Firefox Profile Manager:

  1. 如果Firefox已打开,请关闭Firefox:
  2. 按键盘上的Windows键+R。将打开“运行”对话框。
  3. 在“运行”对话框中,键入:firefox.exe -P单击“确定”。 Firefox配置文件管理器(选择用户配置文件)窗口应打开。
  4. 创建新的配置文件,单击“启动Firefox”
  5. 要打开以前的配置文件,请再次启动“配置文件管理器”,然后选择默认的配置文件

答案 1 :(得分:0)

对我来说,我需要在相同的配置文件中工作,现在我的解决方案已做成一个shell脚本作为守护程序来读取fifo,而我的扩展程序的本机应用程序则在需要运行firefox时编写了fifo。 请注意,您需要在扩展程序的本机应用程序之外运行该守护程序。