24

私は Objective C の新しいプログラマーです。いくつかの HTML ファイルを Objective C に追加しました。この HTML ファイルには、単純な JavaScript 関数が含まれています。目的の C コードを通じてその関数を呼び出す必要があります。私はグーグルを使って多くの時間を試しました。しかし、私はそれを行う本当の方法を見つけることができませんでした。ベローにはhtmlファイルが含まれています:

<!DOCTYPE html>
<html>
    <head>
        <script>
            function myFunction()
            {
                alert("Hello World!");
            }
            </script>
    </head>

    <body>
        <button onclick="myFunction()">Try it</button>
    </body>
</html>

私はこの関数を次のように呼び出しました: 正しいか間違っていますか?? それが間違っている場合、これを行う方法。助けてください。

NSString *path;
NSBundle *thisBundle = [NSBundle mainBundle];
path = [thisBundle pathForResource:@"first" ofType:@"html"];
NSURL *instructionsURL = [NSURL fileURLWithPath:path];
[webView loadRequest:[NSURLRequest requestWithURL:instructionsURL]];

 NSString * jsCallBack = [NSString stringWithFormat:@"myFunction()"];
 [webView stringByEvaluatingJavaScriptFromString:jsCallBack];

[webView stringByEvaluatingJavaScriptFromString:@"myFunction()"];
4

6 に答える 6

33
NSString *path;
NSBundle *thisBundle = [NSBundle mainBundle];
path = [thisBundle pathForResource:@"first" ofType:@"html"];
NSURL *instructionsURL = [NSURL fileURLWithPath:path];
[webView loadRequest:[NSURLRequest requestWithURL:instructionsURL]];

 NSString * jsCallBack = [NSString stringWithFormat:@"myFunction()"];
 [webView stringByEvaluatingJavaScriptFromString:jsCallBack];

[webView stringByEvaluatingJavaScriptFromString:@"myFunction()"];

このすべてのコードが 1 つの場所から呼び出された場合、ページの読み込みは非同期であり、JavaScript コードを含むページはその時点で準備ができていないため、機能しません。[webView stringByEvaluatingJavaScriptFromString:@"myFunction()"];UIWebViewDelegate コールバック メソッドでこのメソッドを呼び出してみてください–webViewDidFinishLoad:

于 2013-01-15T09:22:13.550 に答える
9

JavaScriptCore フレームワークを使用して、Objective-C から JavaScript コードを実行できます。

#import <JavaScriptCore/JavaScriptCore.h>

...

JSContext *context = [[JSContext alloc] init];
[context evaluateScript: @"function greet(name){ return 'Hello, ' + name; }"];
JSValue *function = context[@"greet"];
JSValue* result = [function callWithArguments:@[@"World"]];
[result toString]; // -> Hello, World

ここにデモがあります:

https://github.com/evgenyneu/ios-javascriptcore-demo

于 2013-11-03T11:36:50.410 に答える