2

以下のコードを使用して、Safari で HTML5 アプリ内のリンクを開こうとしました。ただし、コードは、アプリ内の内部ナビゲーションを目的とした # リンクも Safari で開いています。リンクの先頭に HTTP が追加されているため、Safari でリンクが開かれていますか? もしそうなら、どうすればこのスクリプトを修正してそれらを除外できますか?

ありがとう。

参考のため

こちらの GIT リポジトリをご覧ください: https://github.com/philhudson91/flaming-cyril

または、ホストしているドメインからのリンクが開かないように書くことはできますか?

アップデート

これが私が現在使用しているコードです...

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
{
NSURL *requestURL =[ [ request URL ] retain ];
NSCharacterSet * set = [[NSCharacterSet characterSetWithCharactersInString:@"#"] invertedSet];
if ([ [ requestURL scheme ] isEqualToString: @"http" ]) NSLog(@"HTTP"); if ([ [ requestURL scheme ] isEqualToString: @"https" ]) NSLog(@"HTTPS"); if (( [ [requestURL absoluteString] rangeOfCharacterFromSet:set].location == NSNotFound )) NSLog(@"Not Local"); if (( [ [ requestURL scheme ] isEqualToString: @"mailto" ])
    && ( navigationType == UIWebViewNavigationTypeLinkClicked ) ) {
    return ![ [ UIApplication sharedApplication ] openURL: [ requestURL autorelease ] ];
}
[ requestURL release ];
return YES; 
}
4

2 に答える 2

2

次のことを試すことができます: (私はテストしていません。これは、リクエスト スキームが http または https の場合に URL に「#」が含まれていないことを確認するだけです)

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
{
  NSURL *requestURL =[ [ request URL ] retain ];
  NSCharacterSet * set = [[NSCharacterSet characterSetWithCharactersInString:@"#"] invertedSet];

  NSLog([requestURL absoluteString]);

  if ( ((( ([ [ requestURL scheme ] isEqualToString: @"http" ]) || 
           ([ [ requestURL scheme ] isEqualToString: @"https" ])) && 
         ( [ [requestURL absoluteString] rangeOfCharacterFromSet:set].location != NSNotFound ) ) || 
        ( [ [ requestURL scheme ] isEqualToString: @"mailto" ]) ) && 
      ( navigationType == UIWebViewNavigationTypeLinkClicked ) ) {
      return ![ [ UIApplication sharedApplication ] openURL: [ requestURL autorelease ] ];
  }
  [ requestURL release ];
  return YES; 
}
于 2012-09-11T15:52:57.960 に答える
1

前の回答はかなり問題ありませんが、チェックが多すぎるようです。私はむしろそのようなものを使いたい:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
{
    NSString *urlString = request.URL.absoluteString;

    if (([urlString rangeOfString:@"http://m.bu-news.com"].location != NSNotFound)) {
        return YES;
    }
    [[UIApplication sharedApplication] openURL:request.URL];
    return NO;
}

そして、それで十分なはずです。

更新:コードをチェックアウトして、少しテストしました。上記のコードは期待どおりに動作します。すべてのナビゲーション リンクがアプリ内で開き、すべての「記事全体を読む」リンクが Safari で開きます。ただし、すべてのリンクを確認したわけではありません。まだいくつかの問題が存在する可能性があります。

于 2012-10-06T11:03:14.503 に答える