2015-04-20に投稿

cocos2d-jsでObjective-Cからjavascriptを呼び出す

cocos2d-jsで、javascriptからObjective-Cのメソッドを呼び出す方法は
マニュアルにも有りAndroidとほとんど同じなので特に問題なかった。
しかし、Android側のマニュアルでは最後に逆の方法も書かれていたのだが
iOSのマニュアルの方にはなぜか何も書かれていなかった。

さらに検索してみても全く情報が見つからない。
誰もiPhoneアプリの作成のためにcocos2d-jsを使っていないのか、
それとも当たり前すぎて記事にするほどのことでもないのか…。

一応可能になったのでメモ。
ただし、この記事を書いた時点では色々テスト中で、
且つAndroidの時にはrunOnGLThreadしなくてはならなかったが
今回良くわかっていないためそういうことはしていないので、
場合によっては不具合が発生する可能性もまだありそうなので注意。

(2015/5/3 code < 256をcode < 128に修正)

|objc|

import "ScriptingCore.h"

// strにjavascriptのコードを指定
- (void)JsObjCBridge:(NSString *)str {
const char *charstr = [str UTF8String];
ScriptingCore::getInstance()->evalString(charstr, NULL);
}

// コードに全角jsonが含まれる場合、予めこのメソッドでユニコードエスケープしておかないと
// 文字化けする
// Javascript側でJSON.parse。
- (NSString *)convertToUnicode:(NSString *)original {
NSMutableString *str = [NSMutableString string];

for (NSUInteger i = 0; i &lt; original.length; i++) {
    unichar code = [original characterAtIndex:i];
    if (code < 128) {
        NSString *one = [original substringWithRange:NSMakeRange(i, 1)];
        [str appendString:one];
    } else {
        [str appendFormat:@"\\u%04x", code];
    }
}

return str;

}
||

要は
ScriptingCore::getInstance()->evalString
すれば良い。

Androidを参考にすると、
frameworks/js-bindings/bindings/manual/platform/ios
にJavaScriptObjCBridge.mmというのがあったのでこれを使うと思ったのだが、
使い方もどこにも載っていないし何が何だかよく分からなかった。

frameworks/js-bindings/bindings/manual/platform/android
の中身を見るとこっちの方はjavaから呼び出される関数である
Java_org_cocos2dx_lib_Cocos2dxJavascriptJavaBridge_evalString
の記述があり、この中でこのevalStringを使っていたのでこれを真似しただけ。

強制終了してもいやだし何か正しい情報がほしいところ。

ツイッターでシェア
みんなに共有、忘れないようにメモ

だら@Crieit開発者

Crieitの開発者です。 Webエンジニアです(在宅)。大体10年ちょい。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel, React, Flutter, Vue.js, Node, RoR 趣味:Elixir, Phoenix, Nuxt, Express, GCP, AWS等色々 PHPフレームワークちいたんの作者

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント