Внедрение функций JavaScript в UIWebView Не всегда работает - PullRequest
0 голосов
/ 03 марта 2012

Я работаю с веб-приложением в iPhone, и у меня проблема с вызовом нативных методов из JavaScript.

Мне нужно значение, которое находится в моем классе viewController, так что я вызываю нативный метод с использованием window.location, а в shouldStartLoadWithRequest я могу найти, какое значение необходимо, тогда я отправлю это значение с помощью [webView stringByEvaluatingJavaScriptFromString:userId];

Исходя из этого значения, мне нужно вызывать веб-службы в собственном коде. На этот раз shouldStartLoadWithRequest не стреляет. то есть просто "JS -> Native -> JS -> Native" , в этом случае делегат webView не запускается.

Не могли бы вы дать мне решение для этого.

1 Ответ

2 голосов
/ 03 марта 2012

работает web.html хранится в ресурсе.

    NSString *path = [[NSBundle mainBundle] pathForResource:@"web" ofType:@"html"];
    NSString *jsCode = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];

    [webView stringByEvaluatingJavaScriptFromString:jsCode];
    [webView setDelegate:self];
    [webView loadHTMLString:jsCode baseURL:nil];

в web.html , в теле вы должны иметь onload(), который сработает после запуска webView.

<html> <body> <head>

<script>

function anyFunction(){
    window.location='testing123';
}

</script>

</head><body onload="anyFunction();">
</body></html>

оттуда вы сможете получить "testing123".

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{
    NSString *data = [[[request URL] absoluteString] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    if ([data isEqualToString:@"testing123"])
        NSLog(@"value received");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...