[英]iOS: call obj-c methods using javascript in a UIWebview
我正在編寫一個與JS網頁協作的函數。 我使用UIWebView來包含網頁,當我希望網頁與我的應用程序通信時,情況變得復雜。
通過使用– stringByEvaluatingJavaScriptFromString:
方法在UIWebView中調用javascript函數很容易
但是有沒有更簡單的方法來調用網頁中的obj-c函數,使用javascript? 我嘗試使用UIWebView委托方法,但我認為它太hacky了。
有什么建議?
我想使用委托是您可以在iOS WebView中使用的唯一(一個或兩個)方法。 但有幾個包裝可以幫助你輕松。
EasyJSWebView - 這復制了Android中的開發體驗。 在Android中,您可以簡單地使用WebView中的addJavascriptInterface()方法將Javascript橋接到Java。 EasyJSWebView提供同步樣式和異步樣式,用於從Objective-C方法獲取返回值。
WebViewJavascriptBridge - 代碼看起來有點像套接字編程。 您可以在Objective-C中的“server”和Javascript中的“client”之間來回傳遞數據。
GAJavaScript - 這可以提供更好的DOM操作體驗。
看一下所有這些並選擇一個符合您需求的產品。
是的,它確實感覺hacky並且有點遲鈍但你需要使用UIWebViewDelegate
function init()
{
$('input').on('click', function(e) { answerBoxShouldBeginEditing(e); });
}
function answerBoxShouldBeginEditing(e)
{
var object = e.toElement;
var answer = $(object).attr('name');
var request = 'engine:' + answer;
var iframe = document.createElement('IFRAME');
iframe.setAttribute('src', request);
document.documentElement.appendChild(iframe);
iframe.parentNode.removeChild(iframe);
iframe = null;
}
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSString *requestString = [[request URL] absoluteString];
if ([requestString hasPrefix:@"engine:"]) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Hello" message:nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
return NO;
}
return YES;
}
如果您正在考慮升級到WKWebView, XWebView可能是最好的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.