blog

JavaScriptCoreを使って実際の問題を解決する。

一般的に、インターフェースはjson形式の文字列を返します。 しかし、--------はjsで使われるjsコードを返す特別なインターフェイスを持っています。 この場合、返すインターフェイスを制御するパ...

May 18, 2020 · 2 min. read
シェア

JavaScriptCoreで本当の問題を解決しましょう!

デモの url encodeURIComponent

@import JavaScriptCore;
 NSString *scene = webUrl;
 JSContext *context = [[JSContext alloc] init];
 JSValue *encodeValue = [context evaluateScript:[NSString stringWithFormat:@"encodeURIComponent('%@');", scene]];
 if (encodeValue.isString) {
 scene = encodeValue.toString;
 }

一般的にインターフェースはjson形式の文字列を返します。

しかし、--------はjsコードを返す特別なインターフェースを持っています。

json_parse({"code":200,"data":{"base64Str":"YmFzZTY0U3Ry"},"msg":"Request Success })

この場合、返すインターフェースを制御するパラメーターを追加できるかどうか、インターフェースと相談するのが一番です。

jsonを直接返すのがベスト インターフェイスを変更しない場合、問題を解決する方法は2つあります。

文字列のインターセプト

NSString *callback = @"json_parse";
NSString *json = [[res substringToIndex:res.length - 1] substringFromIndex:callback.length + 1];

この利便性はわかりやすく簡単で、比較的単純です。

次に、JavaScriptCoreを使用してjsコードを実行し、次のようにします。

インターフェイスが返すデータをシミュレートします。をエスケープする必要があることに注意してください。
 NSString *res = @"json_parse({"code":200,"data":{"base64Str":"YmFzZTY0U3Ry"},"msg":"Request Success })";
JS実行環境の設定
JSContext *context = [[JSContext alloc] init];
例外捕捉メソッドの設定
context.exceptionHandler = ^(JSContext *context, JSValue *exception) {
 NSLog(@"JS Error: %@", exception);
};
[context evaluateScript:@"function json_parse(jsonstring) {return JSON.stringify(jsonstring, null, 4);}"];
JSValue *value = [context evaluateScript:res];
同じ名前のjsメソッドをインジェクト_parse
if (value.isString) {
 NSString *toStr = value.toString;
 if (toStr) {
 NSData *data = [toStr dataUsingEncoding:NSUTF8StringEncoding];
 // json 
 NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
 NSLog(@"%@", dic);
 }
}

要約

2つ目の方法は少し面倒ですが、アイデアを広げるのに役立ちます。

Read next

J21 4桁の数字をランダムに取得する

1.アイデア:ページが読み込まれるとすぐに、4桁の認証コードを生成してCODEBOXボックスに入れます。CODEBOXボックスをクリックすると、4桁の認証コードを再生成してボックスに入れる必要があります!\n* 4桁の検証コードのルール:ランダムに数字+文字4を取得することができます。\nD

May 18, 2020 · 3 min read