3

Webkit プラットフォームで、javascript から C++ にパラメーターとして無名関数を渡す方法

例:

window.test('helloworld', function(){
    alert('ye');
});

「テスト」は、javascript 用に Web に注入された C++ であり、javascript は 2 つのパラメーターを C++ に渡します。

C++ が非同期として実行されるときに、匿名関数である 2 番目のパラメーターを C++ に呼び出してもらいたいですか?

または、C++ は String 型のパラメーターを受け取るだけですか?

4

1 に答える 1

1
  1. Custom メソッドを DOMWindow インターフェイス (WebKit/Source/WebCore/page/DOMWindow.idl) に追加します。

    ...
    interface DOMWindow{
      ...
      [Custom] void test();
      ...
    };
    ...
    
  2. WebKit/Source/WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp で、名前空間 WebCore にメソッドを追加します。

    ...
    v8::Handle<v8::Value> V8DOMWindow::testCallback(const v8::Arguments& args){
      v8::Local<v8::String> str;
      v8::Local<v8::Function> jsFn;
      if(!args[0]->IsString() || !args[1]->IsFunction())
            return v8::Undefined();
      str = args[0]->ToString();
      jsFn = v8::Local<v8::Function>::Cast(args[1]);
    
      v8::Persistent<v8::Function> pFn = v8::Persistent<v8::Function>::New(jsFn);
      pFn->Call(v8::Context::GetCurrent()->Global(), 0, NULL); // Execute the passed in js function
      return v8::Undefined();
     }
    
于 2013-03-30T14:48:51.473 に答える