我最近开发了一个google chrome扩展程序,它使用了使用FireBreath框架制作的NPAPI插件.我刚刚发现谷歌将很快停止使用这些类型的插件,并最终禁止使用它们的所有现有扩展.所以,我想最终转向NaCl/PPAPI架构,但我不确定这个架构是否甚至可以支持我目前在NPAPI插件中所做的工作.
在我目前的NPAPI插件中,我支持OSX和Windows.在OSX版本上,插件执行system()函数,该函数执行一个小的1行AppleScript.它看起来像这样:
osascript -e 'tell app ...
Run Code Online (Sandbox Code Playgroud)
在Windows版本上,它执行COM库中的函数.两个版本最终都做了同样的事情.我有另一个选择是执行python脚本,如果我要走这条路线,我很可能想在本机组件中嵌入python.
用NaCl/PPAPI可以解决这些问题吗?
npapi google-chrome-extension google-nativeclient firebreath ppapi
我读了一个关于以下区别的问题:
const char*
Run Code Online (Sandbox Code Playgroud)
和
const char[]
Run Code Online (Sandbox Code Playgroud)
虽然有一段时间,我虽然数组只是指针的语法糖.但有些事情让我烦恼,我有一些类似于以下的代码:
namespace SomeNamespace {
const char* str = { 'b', 'l', 'a', 'h' };
}
Run Code Online (Sandbox Code Playgroud)
我得到,错误:缩放器对象'str'在初始化器中需要一个元素.所以,我试过这个:
namespace SomeNamespace {
const char str[] = { 'b', 'l', 'a', 'h' };
}
Run Code Online (Sandbox Code Playgroud)
它起作用,起初我认为这可能与以下事实有关:当它是一个const char*时应用额外的操作,并且GCC从不是在函数外执行的操作的粉丝(这无论如何都是不好的做法),但错误似乎并不是这样.但是在:
void Func() {
const char* str = { 'b', 'l', 'a', 'h' };
}
Run Code Online (Sandbox Code Playgroud)
它按预期编译得很好.有谁知道为什么会这样?
x86_64/i686-nacl-gcc 4(.1.4?)pepper 19工具 - 链(基本上是GCC).
有没有办法检测当前浏览器上是否有NaCl?
chrome.app.isInstalled在某些非Chrome浏览器上,检查似乎变成了误报
javascript google-chrome google-nativeclient google-chrome-app
我打算试用Google的NaCL.我应该使用哪个IDE进行开发?能够从IDE编译项目并在Chrome中运行它会很不错.一些基本的调试也非常有用.
从头开始构建Native Client应用程序需要什么?我查看了文档,并摆弄了几个应用程序,但是,我现在正在制作自己的应用程序,我没有看到任何与创建本机客户端应用程序的基础相关的内容.
谷歌NaCL至少带有两个C++编译器:一个非常古老的gcc版本,以及一个非常新的clang版本.gcc版本不支持C++ 11,所以我宁愿不使用它.新的clang编译器生成中间代码,然后在浏览器中编译,或者将其编译为本机代码.我尝试了第一种方法:让Chrome在浏览器中编译它.问题:异常不起作用,我需要它们.我检查过这个,但我真的无法理解这张票的细则.这留下了第二种方法:在部署之前将代码编译为本机...问题:我可以使用异常吗?或者我应该放弃任何希望?
(... Go Go和this之后,我的印象是Google工程师真的讨厌例外......)
在hello_tutorial目录中运行make.我收到一个错误:
nacl_sdk/pepper_29/toolchain/mac_x86_newlib/bin /../ lib/gcc/x86_64-nacl/4.4.3 /../../../../ x86_64-nacl/bin/ld:找不到-lppapi_cpp collect2 :ld返回1退出状态
我正在使用Mac.
任何的想法?
在Chrome氯化钠扩展,加密从浏览器接收并应该返回通过密文数据PostMessage()我有在发送的数据类型的麻烦unsigned char*了ciphertext.该PP ::瓦尔规范并没有提到关于数据的这种形式的东西.我尝试过转换unsigned char,std::string但没有找到合适的方法.我的代码片段如下:
if(action == "encryption")
{
pp::Var var_content = dict_message.Get("content");
if (!var_action.is_string())
return;
std::string content = var_content.AsString();
//encryption code starts here
const char *password = "password";
unsigned char key[EVP_MAX_KEY_LENGTH], iv[EVP_MAX_IV_LENGTH];
int len = content.length()+EVP_MAX_BLOCK_LENGTH;
unsigned char *ciphertext = (unsigned char*)malloc(len*sizeof(unsigned char));
aes_init(password, (int)strlen(password), key, iv);
len = encrypt((unsigned char*)(content.c_str()), (int)strlen(content.c_str()), key, iv, ciphertext);
pp::Var var_reply(ciphertext);
PostMessage(var_reply);
free(ciphertext);
}
Run Code Online (Sandbox Code Playgroud)
这将返回编译时错误:
crest.cc:55:15: error: calling a private constructor of …Run Code Online (Sandbox Code Playgroud) c++ google-chrome-extension google-nativeclient google-chrome-app
这是正确的,从胡椒18开始,我不需要scons构建系统来编译,而是使用gcc(nacl-versions)和makefile?
此外,生成的.nexe文件是否可以在任何平台上运行,而不仅仅是在编译的平台上,这是正确的吗?因此,例如,本机代码模块在mac os下开发和编译,并生成32位和64位nexe文件.网络服务器我将在linux上运行该模块,并仍然会执行32位和64位版本的模块?
我有兴趣将我的HTML5 Canvas/JavaScript游戏移植到NaCl/C++,但我找不到任何好的NaCl样本源代码访问画布.有人能指点我几个样品吗?请注意,我只对标准2D画布感兴趣,不需要复杂的3D/OpenGL内容.谢谢!
c++ ×6
c++11 ×2
scons ×2
char ×1
firebreath ×1
gcc ×1
html5-canvas ×1
ide ×1
javascript ×1
native-code ×1
npapi ×1
ppapi ×1