2017-02-23 68 views
1

我想创建火狐webextension,即用一个简单的C++应用程序沟通,我想将消息发送到C++应用程序,并收到一个简单的消息(你好世界的例子) 。webextension原生应用程序C++的Hello World

现在,这是我做了什么:

的manifest.json(webextension)

{ 
    "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": "[email protected]", 
     "strict_min_version": "50.0" 
    } 
    } 

} 

background.js

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

manifest.json的(C++应用程序)

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

的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. 

回答

0

我在这里找到了答案:https://groups.google.com/a/chromium.org/forum/#!msg/chromium-extensions/Y5RckbPVnr8/xe5w9RC6O5sJ

#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; 
} 
相关问题