UIWebView中顯示js代碼寫的提示框帶域名問題

問題描述:項目中有個界面是內嵌的,用UIWebView完成內嵌,裏面有個提交按鈕控件,點擊之後如果有不符合條件的會彈出個提示框,但是這個提示框是js那邊寫的,在這邊顯示出來會自帶一個域名,這樣不太好看,爲了解決這個問題,我逛了很多網站,國內的博客有講解的,而且都是標註的是原創,但是代碼都是一模一樣的,太搞笑了,好多的有人評論博主自己都不知道怎麼回答,最關鍵的是根本不能用(至少我看到好多說不能用的),他們寫法如下:
  1. @interface UIWebView (JavaScriptAlert)   
  2.   
  3. - (void)webView:(UIWebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame;  
  4.   
  5. @end  
  6.   
  7. @implementation UIWebView (JavaScriptAlert)  
  8.   
  9. - (void)webView:(UIWebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame {  
  10.       
  11.       
  12.     UIAlertView* customAlert = [[UIAlertView alloc] initWithTitle:@"提示信息" message:message delegate:nil cancelButtonTitle:@"確定" otherButtonTitles:nil];  
  13.       
  14.     [customAlert show];  
  15.       
  16. }  
這個我根本不能用,裏面的WebFrame根本沒有。我在stack overflow上看到了上述代碼一模一樣,所以這些代碼怎麼來的我一下就清楚了。希望寫原創的博主認真點,原創其實並不是複製人家的東西然後自己ctrl+v就算自己的了。

下面看看怎麼解決這個問題吧,直接上代碼,我這個也是在那個網站上看到了:
在web view的代理方法裏面寫

-(void)webViewDidFinishLoad:(UIWebView *)webView

{

//獲取js寫的界面的title

    NSString *title = [_webVIew stringByEvaluatingJavaScriptFromString:@“document.title"];

//導航欄上顯示獲取的titile

    lable.text = title;

 

/*解決webview上內嵌的頁面中彈出來的alert有域名問題!*/ PS:這個纔是這篇博客的關鍵

//1、獲取js的執行環境

    JSContext *ctx = [webView valueForKeyPath:@“documentView.webView.mainFrame.javaScriptContext"];


//2、js那邊寫的提示框的函數入口,這裏差不多有點重寫那個函數的意思。JSValue *message參數可以獲取到js中的提示信息,OC中需要轉換爲string顯示出來,好了完成了。

        ctx[@"window"][@"alert"] = ^(JSValue *message) {

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:[message toString] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];

            [alert show];

        };


    

}



這樣就可以了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章