我正在尝试实现WKWebView来检测我的应用程序中的javascript事件,并在此基础上执行应用程序中的下一个操作。
所以我有以下html页面:
null
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html charset=UTF-8" />
<!-- <meta name="viewport" content="width=device-width, initial-scale=1.0"> -->
<title></title>
</head>
<body style="background-color: #f8f8f8;font-family: 'Helvetica';margin: 0; overflow: auto; float: left; width: 100%">
<div style="max-width:500px;display: block;margin: 30px auto;width: 100%; padding: 60px 40px; color: #76838f; font-size: 14px; background-color: #000;border-radius: 6px; ">
<!-- title -->
<div style="font-size: 24px;font-weight: 600;color: #9d1f2b; text-align: left;font-weight: bold;display: table;border-bottom: 2px solid rgb(255 255 255 / 34%);margin-bottom: 10px;padding-bottom: 20px;width: 100%;">
<span style="display: table-cell; vertical-align: middle;font-size: 28px;">Card Successfully Added</span>
</div>
<!-- title End-->
<!-- content-->
<div style="margin-bottom: 40px;margin-top: 40px;border-bottom: 1px solid #ccc;padding-bottom: 20px;">
{{-- <p style="color: #eee;line-height: 23px;font-size: 18px;margin-bottom: 0">
Payment Token
</p>
<h5 style="color: #fff;font-size: 18px;margin-top: 8px">XYZ</h5> --}}
<p style="color: #eee;line-height: 23px;font-size: 18px;">
Card Number
</p>
<h5 style="color: #fff;font-size: 18px;margin-top: 8px">123</h5>
{{-- <p style="color: #eee;line-height: 23px;font-size: 18px;margin-bottom: 0">
Reference
</p>
<h5 style="color: #fff;font-size: 18px;margin-top: 8px">00000000003</h5> --}}
</div>
<!-- content End-->
<form method="post" name="refer_now_form">
<div class="refer-now-button" style="cursor: pointer">
<a href="{{route('create.successfull')}}" onclick="refer_now.performClick();" id="refernow" style="background: #9d1f2b;color: #fff;display: block;text-align: center;font-weight: bold;text-transform: uppercase;text-decoration: none;height: 50px;line-height: 50px;font-size: 18px;">Back To App</a>
</div>
</form>
</div> <!-- end -->
</body>
<script>
$(document).ready(function() {
function performClick() {
try {
webkit.messageHandlers.callbackHandler.postMessage("Card Successfully Added");
} catch (err) {
console.log('Card failed');
}
}
});
</script>
</html>
null
我还使用解决方案从这里检测javascript事件:如何在iPhone web应用程序中使用jQuery进行单击事件,但这对我不起作用。
下面是我实现的iOS代码。
import UIKit
import WebKit
class ViewController: UIViewController, WKScriptMessageHandler, WKNavigationDelegate, WKUIDelegate {
var webView: WKWebView!
var webConfig:WKWebViewConfiguration {
get {
// Create WKWebViewConfiguration instance
let webCfg:WKWebViewConfiguration = WKWebViewConfiguration()
// Setup WKUserContentController instance for injecting user script
let userController:WKUserContentController = WKUserContentController()
// Add a script message handler for receiving "buttonClicked" event notifications posted from the JS document using window.webkit.messageHandlers.buttonClicked.postMessage script message
userController.add(self, name: "callbackHandler")
if let filePath = Bundle.main.path(forResource: "Test", ofType: "html") {
let script = String(format: filePath, locale: Locale.current)
let userScript = WKUserScript(source: script, injectionTime: .atDocumentEnd, forMainFrameOnly: false)
userController.addUserScript(userScript)
}
// Configure the WKWebViewConfiguration instance with the WKUserContentController
webCfg.userContentController = userController;
return webCfg;
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Create a WKWebView instance
webView = WKWebView (frame: self.view.frame, configuration: webConfig)
// Delegate to handle navigation of web content
webView.navigationDelegate = self
webView.frame = self.view.frame
webView.uiDelegate = self
if #available(iOS 10.0, *) {
webView.configuration.dataDetectorTypes = .all
}
view.addSubview(webView)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
loadBundlHtml()
}
// File Loading
func loadBundlHtml() {
guard let fileUrl = Bundle.main.url(forResource: "Test", withExtension: "html") else { return }
webView.loadFileURL(fileUrl, allowingReadAccessTo: fileUrl)
}
// WKNavigationDelegate
private func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) {
NSLog("%s", #function)
}
private func webView(webView: WKWebView, didFailNavigation navigation: WKNavigation!, withError error: NSError) {
NSLog("%s. With Error %@", #function,error)
}
// WKScriptMessageHandler Delegate
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
if let messageBody = message.body as? [String: Any] {
print(messageBody)
}
}
}
请帮我修好这个。
尝试以下代码将值发布到WKWeb视图
function performClick() {
try {
var messageBody = {type: "ClickType", value: "performClick"}
window.webkit.messageHandlers.ports.postMessage(messageBody);
} catch (err) {
console.log('Card failed');
}
}
}
Swift代码
设置WKWebView
的以下设置
webView.configuration.userContentController.add(self, name: "ports")
若要接收端口消息,请使用下面的委托方法
public func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
guard message.name == "ports" else{
return
}
if let body = message.body as? NSDictionary {
if let messageType = body["type"] as? String, messageType == "ClickType"{
if let messages = body["value"] as? String {
print("messages : ", messages)
}
}
}
}
这里ClickType
是要发送的类型,value是要发送的消息
问题内容: 是否可以使用JavaScript在iPad或Galaxy Tab上检测浏览器方向的变化?我认为使用CSS媒体查询是可能的。 问题答案: 更新: 您可能要签出 jQuery移动方向更改 或普通的JS之一: MDN: 较旧的答案 http://www.nczonline.net/blog/2010/04/06/ipad-web-development- tips/ iPad上的Safari
问题内容: 我需要检测设备何时处于纵向方向,以便可以触发特殊的动画。但是我不希望我的观点自动旋转。 将设备旋转到纵向时,如何覆盖自动旋转的视图?我的应用程序仅需要以横向显示视图,但是如果我想能够检测到纵向旋转,似乎还需要支持纵向。 问题答案: 当应用程序加载或视图加载时,尝试执行以下操作: 然后添加以下方法: 以上内容可让您注册设备的方向更改,而无需启用视图的自动旋转。 在iOS的所有情况下,当您
问题内容: 我在下面找到此定向测试代码,以查找JQTouch参考资料。这可以在移动Safari上的iOS模拟器中正常运行,但在Phonegap中无法正确处理。我的项目遇到了与杀死该测试页相同的问题。有没有办法在Phonegap中使用JavaScript来感知方向变化? 问题答案: 这是我的工作: * 根据MDN的定义, *2019年5月更新:已弃用,大多数浏览器均不支持。该事件与window.or
问题内容: 有没有人建议检测一组字符串中的URL? 更新: 我结束了使用此正则表达式进行链接检测……显然几年后。 问题答案: 首先,您需要一个与网址匹配的优质正则表达式。这很难做到。 …几乎所有内容都是有效的网址。有一些标点符号规则将其拆分。没有标点符号,您仍然有一个有效的URL。 仔细检查RFC,看看是否可以构造“无效” URL。规则非常灵活。 例如,一个有效的URL。路径是。漂亮的文件名,但是
问题内容: 是否存在使用JavaScript检测客户端计算机上安装的Java版本的可靠方法? 问题答案: 在Java Deployment Toolkit中签 出代码。
问题内容: 我有一个可以在iPhone和iPod Touch上运行的应用程序,可以在Retina iPad上运行,但所有其他操作都需要进行一次调整。我需要检测当前的设备是否为iPad。我可以使用什么代码来检测用户是否正在使用iPad ,然后进行相应更改? 问题答案: 有很多方法可以检查设备是否为iPad。这是我最喜欢的检查设备是否实际上是iPad的方法: 我的使用方式 其他例子
本文向大家介绍在JavaScript中使用“ weakMap.has()”方法?,包括了在JavaScript中使用“ weakMap.has()”方法?的使用技巧和注意事项,需要的朋友参考一下 weakMap.has() 此方法用于查找弱映射中是否存在元素。此方法返回一个布尔值,该值 指示 WeakMap对象中是否存在具有指定键的元素。如果存在该元素,则将执行true 作为输出,否则将显示fal
问题内容: 我有一个使用javascript进行游戏的想法(我将使用EaselJS进行开发),我将不得不检测按键。在互联网上四处浏览后,我看到了很多建议(使用window.onkeypress,使用jQuery等),但是几乎每个选项都有一个反对意见。你们有什么建议?使用jQuery听起来很容易,但实际上我没有使用该库的经验(而且我也不是JavaScript的资深人士),所以我宁愿避免使用它。如果j