我一直在使用我在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>
感谢任何帮助或提示。
答案 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