2014-04-10 47 views
3

我是iOS開發新手。我來自Android背景。UIWebView可能檢測何時會顯示Javascript對話框?

我想知道當一個Javascript alert/confirm/prompt對話框即將顯示時,UIWebView是否可能檢測到? (類似於如何Web視圖開始加載一個幀之前的UIWebViewDelegateshouldStartLoadWithRequest方法被調用。)

的就是我正在尋找Android相當於是WebChromeClientonJSAlert(...)onJsConfirm(...)onJsPrompt(...)方法,並藉助這些方法可以讓應用程序決定是顯示給定的對話框還是阻止它。

+0

如何以及在哪裏調用警報?你打算做什麼,UIWebView應該知道Alert? – joern

+0

joern,它被我的'UIWebView'中的內容/頁面調用。 –

+0

[這篇文章](http://blog.impathic.com/post/64171814244/true-javascript-uiwebview-integration-in-ios7)可能對你有用。 – 68cherries

回答

2

UIWebView沒有在即將顯示Javascript警報時調用的方法。但是你可以用shouldStartLoadWithRequest:通知UIWebView有關警報,然後再決定是否顯示與否:

在你的JavaScript時要調用警報做到這一點:

window.location.href = "alert://MESSAGE_TEXT"; 

在你的UIWebView的委託您可以攔截該請求,並決定是否要通過JavaScript調用警報:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 

    switch (navigationType) { 
     case UIWebViewNavigationTypeOther: 
     if ([[request.URL scheme] isEqualToString:@"alert"]) { 
      NSString *message = [request.URL host]; 
      if (SHOULD_SHOW_ALERT) { 
       // the alert should be shown 
       [webView stringByEvaluatingJavaScriptFromString:@"showAlert()"]; 
      } else { 
       // don't show the alert 
       // just do nothing 
      } 

      return NO; 
     } 
     break; 
     default: 
     //ignore 
    } 
    return YES; 
} 

我不知道,如果你需要將消息文本發送到UIWebView,但我包括這樣你就可以看到如何將參數發送到UIWebView。您可以在URL的路徑中添加更多參數。

很顯然你必須用你自己的if子句來交換SHOULD_SHOW_ALERT,它決定了是否顯示警報,你必須添加showAlert()函數到你的Javascript中。