当前位置: 首页 > 面试题库 >

WKWebView-Javascript确认和警报不起作用

刁星渊
2023-03-14
问题内容

我正在使用WKWebView打开example.com,在那儿我有一个测试链接,该链接应该打开JS警报,但我无法在设备上显示该警报,仅当我查看该网站时它才能工作从浏览器。

我正在使用WKUIDelegate,并将这段代码添加到ViewController.swift文件中:

func webView(webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: (() -> Void)) {

    NSLog("Hello")
}

当我单击生成JS警报的链接时,在XCode控制台中看不到任何内容。

我想念什么?


问题答案:

有点晚了,但我想补充一下我的经验以供将来参考。当我尝试使 Swift 3 和IOS 10 能够正常工作时,@ Bon
Bon的答案将我带到了解决方案的道路上,在这种情况下,代码需要进行一些修改。首先,您还需要实现WKUIDelegate,因此将其添加到ViewController声明中:

class ViewController: UIViewController, WKUIDelegate {

然后,当您实例化WKWebView对象时,例如如下所示:

self.webView = WKWebView(frame: self.view.frame)

您还需要uiDelegate为实例的属性分配正确的值:

self.webView?.uiDelegate = self

然后,最后您可以使用@Bon Bon提供的代码,但是请注意,Swift
3需要一些小的差异,例如,presentViewController方法的名称变为present

func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) {

    let alertController = UIAlertController(title: nil, message: message, preferredStyle: .actionSheet)

    alertController.addAction(UIAlertAction(title: "Ok", style: .default, handler: { (action) in
        completionHandler()
    }))

    self.present(alertController, animated: true, completion: nil)
}

func webView(_ webView: WKWebView, runJavaScriptConfirmPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (Bool) -> Void) {

    let alertController = UIAlertController(title: nil, message: message, preferredStyle: .actionSheet)

    alertController.addAction(UIAlertAction(title: "Ok", style: .default, handler: { (action) in
        completionHandler(true)
    }))

    alertController.addAction(UIAlertAction(title: "Cancel", style: .default, handler: { (action) in
        completionHandler(false)
    }))

    self.present(alertController, animated: true, completion: nil)
}

func webView(_ webView: WKWebView, runJavaScriptTextInputPanelWithPrompt prompt: String, defaultText: String?, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (String?) -> Void) {

    let alertController = UIAlertController(title: nil, message: prompt, preferredStyle: .alert)

    alertController.addTextField { (textField) in
        textField.text = defaultText
    }

    alertController.addAction(UIAlertAction(title: "Ok", style: .default, handler: { (action) in
        if let text = alertController.textFields?.first?.text {
            completionHandler(text)
        } else {
            completionHandler(defaultText)
        }

    }))

    alertController.addAction(UIAlertAction(title: "Cancel", style: .default, handler: { (action) in

        completionHandler(nil)

    }))

    self.present(alertController, animated: true, completion: nil)
}

这使得alertconfirmationtext input以正常工作范围内WKWebView,没有任何编译器警告 的Xcode
8
。我不是Swift专家,所以对于代码正确性的任何有用评论都将不胜感激。



 类似资料:
  • 问题内容: 在我的应用程序中,我正在使用,并且在其中,我正在使用方法,但它不起作用,没有弹出窗口。 在清单文件中我添加了 在活动文件中我添加了 在布局xml文件中,我添加了 任何线索如何启用全中? 更新资料 谢谢标记文件中 的方法现在正在工作:)。 现在有两个问题: 1:我正在加载的html文件中使用a ,并尝试在其中使用印地语语言字体,但是当我尝试写印地语文本时,它显示为符号(如矩形符号[])。

  • 基本上,我试图建立一个报警应用程序,其中有一些预定义的日期和时间按钮。我一开始就尝试使用AlarmManager和广播接收器,但都不起作用。所以,我使用了alarmManager的前台服务,但仍然,当应用程序被摧毁时,警报不会发出。我是个新手。我试着在网上搜索,但我没有运气。希望这里有很多人来帮助我。提前谢了。 myservice.java AlarmReceiver.java

  • 问题内容: 如何在警告框或确认框中显示图像?我一直在尝试下面的代码,但在警告框中获取图像URL。请任何人帮助我获得解决,或者如果无法解决,请提出其他建议。 问题答案: JavaScript中的警报框只能显示纯文本。您可以使用jQuery之类的JavaScript库来显示模式吗? 您可以这样做:

  • 我试图在。ics文件中实现警报()。其思想是,每当在系统中创建指定的记录时,就会发送带有邀请的自动电子邮件。该事件工作正常,它正在发送,我能够添加到日历(谷歌日历和iPhone/Mac日历)。 所以问题是:是谷歌和苹果忽视了这些VALARM组件,还是我做错了什么? 我是否正确理解这个带有动作的警报应该只是在浏览器(谷歌日历)和日历应用程序中向我显示一个弹出窗口? 我的文件正文: null

  • 问题内容: 我有一个向网页提供一长串参数的应用程序,因此我必须使用POST而不是GET。问题是当页面显示并用户单击“后退”按钮时,Firefox会显示警告: 要显示此页面,Firefox必须发送将重复之前执行的任何操作(例如搜索或订单确认)的信息。 由于应用程序的构建方式使“返回”是一种非常常见的操作,因此对于最终用户而言确实很烦人。 基本上,我想按照此页面的方式进行操作: http://www.

  • 为什么虽然它没有得到 http.status === 200 但它没有警报失败!