我在iOS 8中的WKWebView显示从Javascript调用的alert 对话框时遇到了一些问题.在创建标准的WKWebView并加载HTML文件之后,我在页面上有一个按钮,用于创建包含一些文本的简单alert .这在UIWebView和Google Chrome/Safari中都有效,但在WKWebView中似乎不起作用.如有任何帮助,我们将不胜感激.

我的设置如下:

WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
config.allowsInlineMediaPlayback = YES;
config.mediaPlaybackRequiresUserAction = false;
_wkViewWeb = [[WKWebView alloc] initWithFrame:_viewWeb.frame config];
_wkViewWeb.scrollView.scrollEnabled = NO;
NSString *fullURL = @"file://.../TestSlide.html";
NSURL *url = [NSURL URLWithString:fullURL];
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10];

[_wkViewWeb loadRequest:request];

HTML具有以下功能:

<SCRIPT Language="JavaScript">
function alertTest() {
    alert("Testing Alerts");
}
</SCRIPT>

和一个按钮:

<b>Test Alerts: <input type="button" value="Alert Popup" onclick="alertTest()"><br></b> <br>

此设置可在UIWebView和常规浏览器中使用,但不能在WKWebView中使用.我是不是在配置中遗漏了什么?我是否应该使用其中一个WK代理来控制alert /确认对话框行为?谢谢.

推荐答案

要解决这个问题,你需要一个WKUIDelegate用于你的web视图.学员有责任决定是否应显示alert ,以及以何种方式显示alert .您需要为alert 、确认和文本输入(提示)实现此功能.

以下是未对页面URL或安全功能进行任何验证的示例代码:

- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler
{
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:message
                                                                             message:nil
                                                                      preferredStyle:UIAlertControllerStyleAlert];
    [alertController addAction:[UIAlertAction actionWithTitle:@"OK"
                                                        style:UIAlertActionStyleCancel
                                                      handler:^(UIAlertAction *action) {
                                                          completionHandler();
                                                      }]];
    [self presentViewController:alertController animated:YES completion:^{}];
}

百强中有更多

Ios相关问答推荐

Flutter应用程序无法使用IOS/Swift的蓝牙核心库发现某些外围设备

带有RadStudio 11.3/12的Mac Mini M2(Sonoma 14.2.1)上的PAServer-测试连接按钮有效,但部署不起作用

为什么EKEventStore().questFullAccessToEvents()可以与模拟器一起使用,而不能与真实设备一起使用?

GraphQL iOS Apollo客户端自动持久化查询导致崩溃

在最新版本的 iOS 中,设备上的Localized.strings文件发生了什么变化?

AVAudioRecord 没有音频

RFID scanner 的蓝牙服务 UUID?

Swift中是否有一种方法可以为可选属性创建一个计算(computed)属性

SwiftUI HStack 文本字段对齐

如何在 SwiftUI 中通过通用 @ObservedObject 进行切换?

不可发送类型 '[String : Any]?'在调用非隔离实例方法 XXX 时退出主参与者隔离上下文不能跨越参与者边界

应用程序被杀死时如何在 flutter ios 应用程序中播放音频?

SwiftUI:同时拖动父视图和子视图,但手指分开

如何根据设备时间设置 Flutter 应用时间线?

'+entityForName: nil 不是合法的 NSManagedObjectContext 参数 - 核心数据

iOS7 UITextView contentsize.height 替代

测试目标 X 遇到错误(提前意外退出,操作从未完成 bootstrap - 不会try 重新启动

以编程方式确定 iPhone 是否越狱

找不到开发者磁盘映像

Xcode 6 进程启动失败:try 启动应用程序超时