2016-05-18 4 views
1

私はcocos2d-xでのアプリケーション開発を学んでいます。 WebViewからコールバックを実装するにはどうすればよいですか? 私はcocos2d-x v3.10を使用しています。cocos2d-x(v3.10)のWebviewからコールバックを取得できません

test_index.html

<head> 
    <meta charset="utf-8"> 
    <meta name="apple-mobile-web-app-capable" content="yes"> 
    <meta name="format-detection" content="telephone=no"> 
    <meta name="robots" content="none" /> 
    <meta name="viewport" content="width=device-width,height=device-height"> 
</head> 

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> 
    <script src="js/sp.js"></script> 
    <ul class="slideshow"> 
     <li> 
     <a href="#" onclick='sp.call("test1")'> 
     <img src="img/test1.jpg" width="100%"/> 
     </li> 
    </ul> 
    <style> 
     .bx-default-pager { 
      display: none; 
     } 
     .bx-viewport { 
      border: none !important; 
     } 
    </style> 
</body> 

sp.js

(function(){ 
    var sp = {}; 
    var isAndroid = navigator.userAgent.match(/Android/); 
    var isIOs = navigator.userAgent.match(/iPhone/) || navigator.userAgent.match(/iPod/) || navigator.userAgent.match(/iPad/); 
    sp.call = function(text){ 
     if(isAndroid){ 
      window.Cocos2dx.call(text); 
     } else if (isIOs) { 
      window.location.href = "cocos2dx:" + text; 
     } else { 
      window.location.href = text; 
     } 
    }; 
    window.sp = sp; 
})(); 

TEST.CPP

bool TestScene::init() 
{ 
     auto webView = cocos2d::experimental::ui::WebView::create(); 
     webView->loadURL("http://test/test_index.html"); 
     webview->setONJSCallback(CC_CALLBACK_1(TestScene::callbackFromJS,this)); 
     webView->setAnchorPoint(Point(0,0)); 
     webView->setPosition(Point(0,150)); 
     webView->setContentSize(Size(WINSIZE.width,WINSIZE.height-150)); 
     this->addChild(webView,1); 

} 

void TestScene::callbackFromJS(cocos2d::experimental::ui::WebView* webview, std::string* url) 
{ 
    log("call this method"); 
} 

"setOnJSCallback" の間違った使用?

+0

プロジェクトは、https以外のサイトからの任意の読み込みを許可していますか? – Striker

+0

いいえ、私のプロジェクトはhttpsにアクセスすることもできます。 – PluSmiles

答えて

0

"http"ではなく "https"にしかアクセスできません。これは、新しいIOS 9の制限のためです。

<key>NSAppTransportSecurity</key> 
<dict> 
     <!--Include to allow all connection --> 
    <key>NSAllowsArbitraryLoads</key> 
    <true/> 
</dict> 
+0

ありがとうございますが、既に "NSAllows任意の負荷"が許可されています。 Webサイトを読み込むことができます。しかし、私はWebボタンを押してコールバックを取得することはできません。 – PluSmiles

1

JSCallbackは、次のように動作します。

URLがロードされるたびに、webviewに定義されているJavascriptInterfaceScheme名が含まれているかどうかをチェックします。それがあれば、代わりにそのURLをロードしてJSCallBack関数を呼び出さないでください。そうでなければ、通常はURLをロードします。 @Plusmilesの場合、JavascriptInterfaceScheme名は設定していません。以下は

あなたはcocos2dxは、WebViewの中で設定されJavascriptInterfaceScheme名です

window.location.href = "cocos2dx:" + text; 

を設定する必要があるhtmlファイルから呼び出すことが私のため

cocos2d::experimental::ui::WebView * Practice::_webView; 
_webView = experimental::ui::WebView::create(); 
_webView->setContentSize(Size(1200, 1200)); 
_webView->setPosition(Vec2(900,768)); 
_webView->setJavascriptInterfaceScheme("cocos2dx"); 
_webView->loadURL("https://example.com"); 
_webView->setOnJSCallback(&Practice::callbackFromJS); 
this->addChild(_webView, 1); 


void Practice::callbackFromJS(cocos2d::experimental::ui::WebView* webview, const std::string &answer) { 
    std::string response = answer; 
} 

を働いたコードです。この名前がurlで見つかるたびに、webviewオブジェクトを最初のパラメータとして、urlをsecondとして関数を呼び出します。したがって、JSCallback関数を呼び出すのではなく、URLをロードする場合は、このwebviewをURLで回避する必要があります。

この回答が役に立ちそうです。

関連する問題