WKWebView RunJavaScriptConfirmPanel无法找到要委派转换方法的块

时间:2018-04-12 13:32:35

标签: javascript xamarin.ios ios11 wkwebview

我试图在Xamarin.iOS App中捕获确认面板,但它只能在模拟器中使用。

[Foundation.Export("webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:completionHandler:")]
public void RunJavaScriptConfirmPanel(WKWebView webView, string message, WKFrameInfo frame, Action<bool> completionHandler)
{

    var alertController = UIAlertController.Create(null, message, UIAlertControllerStyle.ActionSheet);

    alertController.AddAction(UIAlertAction.Create("Sí", UIAlertActionStyle.Destructive, okAction =>
    {
        completionHandler(true);
    }));
    alertController.AddAction(UIAlertAction.Create("No", UIAlertActionStyle.Default, cancelAction =>
    {
        completionHandler(false);
    }));

    _controller.PresentViewController(alertController, true, null);

}

我正在关注xamarin官方网页(https://developer.xamarin.com/recipes/ios/content_controls/web_view/handle_javascript_alerts/)中的下一个示例,但是当我在iPhone 8上运行该应用时,我收到此错误:

ObjCRuntime.RuntimeException: 无法找到块来委托方法XXXX.iOS.Infrastructure.JSDelegate.RunJavaScriptConfirmPanel的参数#4的转换方法。请在http://bugzilla.xamarin.com提交错误。

这就是我正在使用的:

环境

ios 11.3 Xcode 9.3 Xamarin.iOS:版本:11.9.1.24(Visual Studio社区) Visual Studio Mac 7.4.2(build 12)

任何想法?我不明白为什么只能在模拟器中使用官方示例......

1 个答案:

答案 0 :(得分:0)

Xamarin的例子只在模拟器中使用,但我将方法签名更改为:

public override void RunJavaScriptConfirmPanel(WKWebView webView,string message,WKFrameInfo frame,Action completionHandler) {

没有任何Foundation Export,现在正在使用模拟器和物理设备。