2012-02-22 55 views
1

我有一個UIWebView,我希望所有鏈接打開一個新的頁面。UIWebView檢測當JavaScript正在加載一個新頁面

我有這樣的代碼,當用戶點擊一個鏈接來檢測並打開一個新頁面上的鏈接:

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


//If the user clicked a link don't load it in this webview 
if (navigationType == UIWebViewNavigationTypeLinkClicked) { 


     NSURL* URLToGoTo = [request URL]; 
     self.fullWebView.url = URLToGoTo; 
     [self.navigationController pushViewController:fullWebView animated:YES]; 
     return NO; 
} 
//Else this is the webview being loaded for the first time, let it load. 
return YES; 

的問題是一些網站使用JavaScript來打開像這樣的鏈接:

win = window.open("/magic/card.asp?name="+cardname+"&set="+set+"&border="+border, windowName, params); 

if (!win.opener) 
{ 
    win.opener = window; 
} 

不幸的是,這些類型的鏈接沒有UIWebViewNavigationTypeLinkClicked屬性,並會在我的UIWebView的同一個窗口中打開。

我試着看看URL的scheme屬性,看它是否是「javascript」,但它看起來與普通鏈接使用的URL完全相同。

任何人都可以想出一種方法來檢測網頁正在打開的JavaScript函數?

我想,最壞的情況下,我可以用一個布爾值,以確定這是否是第一次我的UIWebView被加載並加載所有後續鏈接在新頁,但必須有一個更好的解決方案

謝謝!

回答

3

是的:要抓住Javascript引起的頁面加載,你應該檢查navigationType == UIWebViewNavigationTypeOtherwebView: shouldStartLoadWithRequest:navigationType:

+0

我試過了,但它抓住我第一次從字符串加載視圖自己。也許我可以檢測何時第一次加載視圖並重定向所有後續加載? – itgiawa 2012-02-23 02:25:46

+0

當您將HTML字符串加載到WebView中時,webView:shouldStartLoadWithRequest:navigationType:中的請求URL是'nil'或''about:blank'' - 您應該能夠捕獲這些以區分初始加載和隨後的。 – 2012-02-23 10:10:57

1

UIWebViewNavigationTypeOthernavigationType還將包括後臺頁面加載,如分析,我想你要從外部加載。

只檢測頁面導航,你需要比較[request URL][request mainDocumentURL]

- (BOOL)webView:(UIWebView *)view shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)type 
{ 
    if ([[request URL] isEqual:[request mainDocumentURL]]) 
    { 
     [[UIApplication sharedApplication] openURL:[request URL]]; 
     return NO; 
    } 
    else 
    {  
     return YES; 
    } 
}