2

Safari で、最初の読み込み後に任意の URL を読み込もうとしています。他の Web ページでは、このコードは正常に機能します。

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

    return YES;
}

しかし、m.youtube.com にアクセスするとすぐに、コードは何も実行しなくなり、YouTube は引き続き UIWebView 内でロードされます。私はこれについてオンラインで何も見つけることができません。何か助けはありますか?

これが私の .m ファイル全体です。

#import "SecondViewController.h"

@interface SecondViewController ()

@end

@implementation SecondViewController
@synthesize topLayer = _topLayer;
@synthesize layerPosition = _layerPosition;
@synthesize webView = webView;

#define VIEW_HIDDEN 260

- (void)viewDidLoad
{
    [super viewDidLoad];

    webView.delegate = self;

    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://m.youtube.com"]]];
    [webView setBackgroundColor:[UIColor clearColor]];
    [webView setOpaque:NO];
    webView.scrollView.bounces = NO;
    webView.scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;


    [self performSelector:@selector(makeTick)];

    self->promoteImages.contentSize = CGSizeMake(1920, 101);

    UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Scroll3.png"]];

    [self->promoteImages addSubview:imageView];

    [promoteImages setShowsHorizontalScrollIndicator:NO];

    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

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

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

    return YES;
}

@end

ビュー コントローラーの .h ファイルは次のとおりです。

#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>
#import <Social/Social.h>

@interface SecondViewController : UIViewController <UIWebViewDelegate>
{
    IBOutlet UIScrollView *promoteImages;
    NSTimer *time;

    IBOutlet UIWebView *webView;
}

@property (nonatomic, nonatomic) UIWebView *webView;
@property (weak, nonatomic) IBOutlet UIView *topLayer;
@property (nonatomic) CGFloat layerPosition;
@property(nonatomic,readonly,getter=isDragging)    BOOL dragging;

@end
4

1 に答える 1

1

私が使用するコードは次のとおりです。

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

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

    return YES;
}

問題は次のとおりです。

[[UIApplication sharedApplication] openURL:url];

への変更:

[[UIApplication sharedApplication] openURL:request.URL];

http://www.example.com/share特定の URL のみを Safari で開くように指定することもできます。たとえば、次のように始まる URL はすべて指定できます。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
        if ((navigationType == UIWebViewNavigationTypeLinkClicked) && ([currentURL hasPrefix:@"http://www.example.com/share"])) {

            [[UIApplication sharedApplication] openURL:request.URL];
            return NO;
        }
    }
于 2013-01-23T17:07:21.027 に答える