window.location未设置/ webView shouldStartWithLoadRequest未被调用

时间:2014-01-23 00:21:25

标签: javascript ios objective-c uiwebview

我一直在使用我在StackOverflow上找到的几个主题,但我似乎无法做到正确。

我的应用程序在本地存储了一个HTML页面,我正在尝试使用一些Javascript来处理我的obj-c代码。

这是我的JavaScript文件:

<button onclick="myFunction()">Try it</button>


<script>
function myFunction()
{
    window.location.href = "ios:webToNativeCall";
    alert(window.location.href);
}
</script>

这是我的obj-c方法

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    NSLog(@"test");
    if ([[[request URL] absoluteString] hasPrefix:@"ios:"]){
        NSLog(@"test");
        [self webToNativeCall];
        return NO;
    }

我会发布两个单独的主题,但我感觉这些问题是相互关联的。在JS文件中,警报打印系统中.html文件的正确路径。 NSLog(@"test")都没有被执行。

我已设置WebView委托:

@interface WebBrochureViewController : UIViewController <UIWebViewDelegate>

感谢任何帮助或提示。

1 个答案:

答案 0 :(得分:1)

您的Storyboard设置可能存在问题。您应首先尝试一个简单的案例作为概念证明,然后学习如何使其适应更大的图景。

这是一个很好的简单视图控制器,可以解决您的问题。

@interface MyViewController : UIViewController <UIWebViewDelegate>
@property (nonatomic, weak) IBOutlet UIWebView *webView;

@end

@implementation MyViewController

- (void)loadView
{
    UIView *view = [[UIView alloc] initWithFrame:CGRectZero];

    [view addSubview:({
        UIWebView *webView = [[UIWebView alloc] initWithFrame:view.bounds];
        webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
        webView.delegate = self;
        self.webView = webView;
    })];
    self.view = view;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSURL *url = [[NSBundle mainBundle] URLForResource:@"index" withExtension:@"html"];
    NSAssert(url!=nil, @"Could not find URL for index.html");
    NSData *data = [NSData dataWithContentsOfURL:url];
    [self.webView loadData:data
                  MIMEType:@"text/html"
          textEncodingName:@"utf-8"
                   baseURL:nil];
}

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSLog(@"[%@] Delegate method started.", NSStringFromSelector(_cmd));
    if ([request.URL.scheme isEqualToString:@"ios"]) {
        NSLog(@"[%@] Communication Received.", NSStringFromSelector(_cmd));
        return NO;
    }
    return YES;
}

@end