1

有人可以验证以下关于 PPAPI 的假设吗?

  1. PPAPI 插件需要使用 Nacl 编译器编译,这对其设置了 API 限制。
  2. 此外,PPAPI 插件的加载似乎只有在通过 Chrome Webstore 发布时才有可能
  3. PPAPI 将支持异步通信,如根据https://developers.google.com/native-client/devguide/coding/message-system 的本机消息传递,并且根据以下页面,不鼓励使用 PPAPI 进行同步通信。 http://code.google.com/p/ppapi/wiki/InterfacingWithJavaScript

我们需要拦截 chrome 流量,将其发送到原生应用程序进行分析,并根据分析结果实时阻止它。尝试探索原生消息传递,但它的问题是它只支持异步通信,不支持以下用例。

interceptHeader 是使用 ["blocking", "requestHeaders"] 规范添加到 chrome.webRequest.onBeforeSendHeaders 的侦听器。

interceptHeaders: function(details)
{
    var verdict = false;

    //send request for scanning only if it is a POST request                         
    if (details.method == "POST")
    {
        //create new responseObject
        var responseObject = new ResponseObject();

        /use native messaging to send request for scanning
       chrome.runtime.sendNativeMessage('com.my_company.my_application',
                                          requestObject,
                                          responseObject.Callback
                                        );

        // wait for response - how to efficiently wait unitl responseObject.Callback is processed
        // so that responseObject.verdict can be used as a return value of interceptHeaders as shown below
        ??????????????           

        //update the verdict (true or false)
        verdict = responseObject.verdict;

        console.log ("verdict " + verdict + "for RequestId " + details.requestId);

        //delete the responseObject
        delete responseObject;
    }

    return {cancel: verdict};
}
4

1 回答 1

1

无法同步阻止插件。出于性能和稳定性原因(支持进程之间的同步调用意味着从阻塞的内部进行可重入调用,这几乎可以保证您的代码崩溃或严重混淆),该 API 是专门针对此要求设计的。

于 2014-02-13T22:51:55.200 回答