【问题标题】:iOS - UIWebView - Need Submitted form to Open in SafariiOS - UIWebView - 需要提交的表单才能在 Safari 中打开
【发布时间】:2011-09-28 19:51:52
【问题描述】:

我一直在为iOS 平台开发一个HTML5 / Javascript webapp。我对 Objective 和 XCode 比较陌生,但我知道我的程序。我试图让 UIWebView 打开一个表单,一旦在 Safari 中提交(提交按钮),而不是在当前 UIWebView 中打开它。

建议使用以下代码在 Safari 中打开标准 <a> 标签:

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

return YES;

}

(原帖here)

我已尝试专门针对提交的表单调整此代码,如下所示:

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

if ( inType == UIWebViewNavigationTypeFormSubmitted ) {
    [[UIApplication sharedApplication] openURL:[request URL]];
    return YES;
}
if ( inType == UIWebViewNavigationTypeFormResubmitted ) {
    [[UIApplication sharedApplication] openURL:[request URL]];
    return YES;
}

return YES;

}

仅供参考,我已将每个 IF 语句的返回值切换为 YES / NO,但这似乎不是问题......有什么想法吗?代码?理论? 谢谢!

【问题讨论】:

    标签: javascript ios html web-applications uiwebview


    【解决方案1】:

    以下实现了我正在寻找的“在Safari中打开”结果。

    首先我通过在我的viewDidLoad 声明中添加webView.delegate = self; 来实现UIWebViewDelegate 协议:

    appViewController.m

    - (void)viewDidLoad 
    {
        [super viewDidLoad];
        NSString *filePath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];  
        NSData *htmlData = [NSData dataWithContentsOfFile:filePath];  
        if (htmlData) {  
            NSBundle *bundle = [NSBundle mainBundle]; 
            NSString *path = [bundle bundlePath];
            NSString *fullPath = [NSBundle pathForResource:@"index" ofType:@"html" inDirectory:path];
            [webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:fullPath]]];
            webView.delegate = self;
        }
    }
    

    其次,我添加了以下内容:

    -(BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request 
                                                   navigationType:(UIWebViewNavigationType)navigationType 
    {
        NSURL* url = [[request URL] retain];
        if (navigationType == UIWebViewNavigationTypeFormSubmitted || navigationType ==     UIWebViewNavigationTypeFormSubmitted)
        {
            return ![[UIApplication sharedApplication] openURL:url];
        }
        return YES;
    }
    

    好奇的一点是 XCode 返回了以下警告标志:

    警告:“appViewController”类未实现“UIWebViewDelegate”协议

    不知道为什么……但是!该应用程序现在会在 Safari 中打开提交表单的结果。

    【讨论】:

    • 要消除该警告:在您的 AppViewController.h 中,声明该类符合 <UIWebViewDelegate> 正式协议。它应该是这样的:@interface AppViewController : UIViewController <UIWebViewDelegate>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 2014-03-18
    • 2015-10-27
    相关资源
    最近更新 更多