Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS:在UIWebview中使用javascript调用obj-c方法_Javascript_Iphone_Ios_Objective C_Xcode - Fatal编程技术网

iOS:在UIWebview中使用javascript调用obj-c方法

iOS:在UIWebview中使用javascript调用obj-c方法,javascript,iphone,ios,objective-c,xcode,Javascript,Iphone,Ios,Objective C,Xcode,我正在编写一个与JS网页协作的函数。我使用UIWebView来包含网页,当我希望网页与我的应用程序通信时,情况变得复杂 通过使用–stringByEvaluatingJavaScriptFromString:方法,在UIWebView中调用javascript函数很容易 但是有没有更简单的方法可以使用javascript在网页中调用obj-c函数呢?我尝试使用UIWebView委托方法,但我认为它太粗糙了 有什么建议吗?是的,它确实让人感觉不舒服,而且有点滞后,但您需要使用UIWebViewDe

我正在编写一个与JS网页协作的函数。我使用UIWebView来包含网页,当我希望网页与我的应用程序通信时,情况变得复杂

通过使用
–stringByEvaluatingJavaScriptFromString:
方法,在UIWebView中调用javascript函数很容易

但是有没有更简单的方法可以使用javascript在网页中调用obj-c函数呢?我尝试使用UIWebView委托方法,但我认为它太粗糙了


有什么建议吗?

是的,它确实让人感觉不舒服,而且有点滞后,但您需要使用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;
}

我想在iOS WebView中,使用委派是唯一(一种或两种)可以使用的方法。但是有几种包装可以帮助你轻松解决问题

  • -这复制了Android中的开发体验。在Android中,您可以简单地使用WebView中的addJavascriptInterface()方法将Javascript连接到Java。EasyJSWebView提供了从Objective-C方法获取返回值的同步样式和异步样式

  • -代码可能看起来有点像套接字编程。您可以在Objective-C中的“服务器”和Javascript中的“客户端”之间来回传递数据

  • -这可以提供更好的DOM操作体验


  • 请查看所有这些选项,并选择一个适合您需要的选项。

    如果您正在考虑升级到WKWebView,这可能是最好的解决方案。

    太好了!另一种方法-发出XHR请求。这两种方法都是在“cordova/exec”模块(js部分)中实现的,在使用iframe时我遇到了这个问题,请看我的问题啊,这是我一直在寻找的。我知道目前还没有其他方法可以实现这一点,但包装器绝对是有帮助的。谢谢EasyJSWebView真是太棒了!它正是你需要的东西。为Dukeland的兄弟们干杯。谢谢!