簡體   English   中英

如何強制UIWebView在瀏覽器中打開鏈接?

[英]How to force UIWebView to open link in browser?

我們有一個網站。 在某些情況下,用戶可以使用內置瀏覽器從Facebook App或VKontakte App打開。 並且有一個我想在Safari或其他瀏覽器中打開的鏈接。 但是不在此WebView中。

是否有任何HTML屬性或可以告訴WebView的內容本身無法打開此鏈接?

更新:我不是應用程序開發人員。 我是網頁開發人員。 而且我無權訪問Facebook App。 我需要強制Facebook App不在其內置瀏覽器中打開鏈接。

您可以使用UIWebViewDelegate:

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    if(UIWebViewNavigationTypeLinkClicked == navigationType /*you can add some checking whether link should be opened in Safari */) {

        [[UIApplication sharedApplication] openURL:[request URL]];
        return NO;
    }
    return YES;
}

Web視圖包含一些委托方法,可從該委托方法中找到click事件,您需要像這樣調用URL

 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"www.google.com"]];

這是在單擊Web視圖內的任何鏈接時將觸發的委托方法

    -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
if (navigationType == UIWebViewNavigationTypeLinkClicked) {
{
   [[UIApplication sharedApplication] openURL:[request URL]];
}

}

只需將URL與URLRequest區分即可。

如果已設置UIWebViewDelegate ,則可以使用方法

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

使用此方法,我們可以阻止或允許在UIWebView或移動瀏覽器中打開某些鏈接/ URL。

所以我們可以做類似的事情

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    // We only want to block links
    if(navigationType == UIWebViewNavigationTypeLinkClicked) {
        NSString *url = [[request URL] absoluteString];
        if([url isEqualToString:@"http://www.google.co.uk"]) {
            // If the requested url is a link and is http://www.google.co.uk block it from loading in the UIWebView and load it in the mobile browser.
            if([[UIApplication sharedApplication] canOpenUrl:[request URL]]) {
                // We should be checking to make sure we can open it first, for whatever reason we might not be able to and we don't want to give the user a bad journey.
                [[UIApplication sharedApplication] openURL:[request URL]];

                // We also need to tell our UIWebView not to do anything so we need to return NO.
                return NO;
            }
        }
    }

    // If all is OK and we are happy for any other link to be included then just return YES and continue.
    return YES;
}

如果要阻止所有鏈接,則只需刪除isEqualToString: if statement或者可以通過在if statement添加else if來阻止某些鏈接。 此代碼執行以下兩項操作之一:如果傳遞了if statements則它將加載UIWebView單擊的鏈接站點,或者將其加載到移動瀏覽器中。

UPDATE

事實證明,用戶沒有在做html ,而這不是原始問題中的目的,這不是用戶的objective-c ,但是由於這可能會在將來對用戶有所幫助,因此我將在這里留下答案。

編輯

由於用戶使用html嘗試將用戶定向到移動瀏覽器,因此他們所尋找的稱為URL方案。 不幸的是,我不認為從iOS 7會有任何URL方案可以打開Safari移動瀏覽器。 之前已經有人問過這個問題,所以我不再坐在這里再說一遍,我將引導您解決這個問題,並通過WebView中的鏈接回答Open Mobile Safari

//codigo para abrir no safari
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; {

NSURL *requestURL =[ [ request URL ] retain ];
if ( ( [ [ requestURL scheme ] isEqualToString: @”http” ] || [ [ requestURL scheme ] isEqualToString: @”https” ] || [ [ requestURL scheme ] isEqualToString: @”mailto” ])&& ( navigationType == UIWebViewNavigationTypeLinkClicked ) )
{ return ![ [ UIApplication sharedApplication ] openURL: [ requestURL autorelease ] ]; } [     requestURL release ]; return YES;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM