webextension native application c++ hello world



我想在firefox上创建一个与简单的C 应用程序通信的webextension,我想向C 应用程序发送消息,并收到一个简单的消息(Hello world by hello world by示例)。

现在这就是我所做的:

清单。

{
  "manifest_version": 2,
  "name": "nameofwebextension",
  "version": "1.0",
  "description": "test",
    "permissions": [
    "tabs",
    "activeTab",
    "downloads",
    "downloads.open",
    "nativeMessaging"
    ],
  "icons": {
    "48": "icons/border-48.png"
  },
  "content_scripts": [
  {
    "matches": ["http://www.testwebsite.com/*"],
    "js": ["content.js"]
  }
    ],
  "background": {
  "scripts": ["background.js"]
},
  "browser_action": {
    "default_icon": "icons/beasts-32.png",
    "default_title": "test",
    "default_popup": "popup/test.html",
    "browser_style": false
  },
    "applications": {
    "gecko": {
      "id": "name@example.org",
      "strict_min_version": "50.0"
    }
  }
}

背景.js

var port = browser.runtime.connectNative("nameofapp");
console.log("Sending:  ping");
port.postMessage("ping");
port.onMessage.addListener((response) => {
  console.log("Received: " + response);
});

subtest.json(C 应用)

{
  "name": "nameofapp",
  "description": "Example host for native messaging",
  "path": "bin/Debug/nameofapp.exe",
  "type": "stdio",
  "allowed_extensions": [ "name@example.org" ]
}

main.cpp

#include <iostream>
using namespace std;
int main()
{
    cout << "Hello world!" << endl;
    //cin.get();
    return 0;
}

我还创建了注册表编辑器中的正确键。

这是我进入浏览器控制台的内容:

Sending:  ping  
Native application tried to send a message of 1819043144 bytes, 
which exceeds the limit of 1048576 bytes.

我在此处找到答案:https://groups.google.com/a/chromium.org/forum/forum/# !! msg/chromium-extensions/y5rckbpvnr8/xe5rckbpvnr8/xe5w9rc6rc6rc6rc6rc6

#include <iostream>
int main(int argc, char* argv[])
{
    std::cout.setf( std::ios_base::unitbuf ); //instead of "<< eof" and "flushall"
    unsigned int a, c, i, t=0;
    std::string inp;
    bool bCommunicationEnds = false;
    do {
        inp="";
        t=0;
        // Sum the first 4 chars from stdin (the length of the message passed).
        for (i = 0; i <= 3; i++)
        {
//          t += getchar();
            t += std::cin.get();
        }
        // Loop getchar to pull in the message until we reach the total
        //  length provided.
        for (i=0; i < t; i++)
        {
            //c = getchar();
            c = std::cin.get();
            //if(c == EOF)
            if(c == 65)
            {
                bCommunicationEnds = true;
                i = t;
            }
            else
            {
                inp += c;
            }
        }
        if(!bCommunicationEnds)
        {
            //Collect the length of the message
             unsigned int len = inp.length();
            //unsigned int len = strJson.length();
            //// We need to send the 4 btyes of length information
            std::cout << char(((len>>0) & 0xFF))
                << char(((len>>8) & 0xFF))
                << char(((len>>16) & 0xFF))
                << char(((len>>24) & 0xFF));
            //// Now we can output our message
            std::cout << inp;
        }
    }while(!bCommunicationEnds);
    return 0;
}

相关内容

  • 没有找到相关文章

最新更新