[英]UIWebView detect when javascript is loading a new page
我有一個UIWebView,並且希望所有鏈接在新頁面上打開。
我具有以下代碼來檢測用戶何時單擊鏈接並在新頁面上打開該鏈接:
- (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並在新頁面中加載所有后續鏈接,但是必須有一個更好的解決方案
謝謝!
是:要捕獲Javascript引發的頁面加載,您應該在webView: shouldStartLoadWithRequest:navigationType:
檢查navigationType == UIWebViewNavigationTypeOther
webView: shouldStartLoadWithRequest:navigationType:
一個navigationType
的UIWebViewNavigationTypeOther
還將包括后台頁面加載,如分析,我想你不希望外部加載。
要僅檢測頁面導航,您需要將[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;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.