uiwebview中的javascript事件处理程序

时间:2011-07-29 05:55:44

标签: iphone objective-c xcode

我在iPhone应用程序中显示一个UIWebView。在UIWebView中,我显示的HTML页面也有JavaScript。我想在HTML页面中单击一个按钮时调用(X代码)方法。

我该怎么做? 感谢

2 个答案:

答案 0 :(得分:38)

如果我正确理解您的问题,您希望通过onClick中的javascript UIWebView事件处理程序调用Objective C方法。这样做的方法是将浏览器重定向到您的javascript代码中带有自定义方案的URL,如下所示:

function buttonClicked() {
    window.location.href = "yourapp://buttonClicked";
}

返回Objective C,声明您的视图控制器符合UIWebViewDelegate协议

@interface DTWebViewController : DTViewController <UIWebViewDelegate> {
...

将您的控制器设置为Web视图的委托,

- (void)viewDidLoad {
    [super viewDidLoad];
    self.webView.delegate = self;
}

并在加载之前拦截URL:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    if ([[request.URL scheme] isEqual:@"yourapp"]) {
        if ([[request.URL host] isEqual:@"buttonClicked"]) {
            [self callYourMethodHere];
        }
        return NO; // Tells the webView not to load the URL
    }
    else {
        return YES; // Tells the webView to go ahead and load the URL
    }
}

答案 1 :(得分:0)

Swift版本

webView.delegate = self

extension ViewController: UIWebViewDelegate {
    func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        if request.description == "yourappname://buttonClicked" {

            // do your stuff here
            return false
        }
        return true
    }    
}

示例HTML

<a href="yourappname://buttonClicked">
    <img src="http://someurl.com/table_desktop.jpg"/ width="100%">
</a>

如果您想知道如何在wkWebView中执行此操作,请参阅link