通过 Swift 中的 UIWebView 从 Javascript 传递数组
Pass an Array from Javascript via UIWebView in Swift
我必须在项目中使用UIWebView
,我似乎遇到了问题。
好吧,我有如下html。
<html>
<a onclick="myFunction(1)">element1</a>
<a onclick="myFunction(2)">element1</a>
<a onclick="myFunction(3)">element1</a>
</html>
当我点击 href 链接时,我必须执行我的 javascript 代码
<script>
var arr = [];
function myFunction(number) {
arr.push(number);
}
</script>
现在我怎样才能把Array
传给UIViewController
?
以及我如何迅速知道我是否从UIWebView
打电话给myFunction()
?
您可以使用
WKWebView
,自OS X 10.10或iOS 8起可用。在 Xcode 9 及更高版本中,您可以将WkWebView
直接添加到界面生成器并连接IBOutlet
。对于早期版本的 Xcode,您必须以编程方式执行此操作。为了完全兼容,下面的代码演示如何以编程方式添加WKWebView
。
使您的视图控制器符合WKScriptMessageHandler
协议并添加以下代码:
class ViewController: UIViewController, WKScriptMessageHandler {
weak var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
// myAction is the pipe name Javascript uses to post messages
// to your app. You can define more than 1 pipe.
let controller = WKUserContentController()
controller.addScriptMessageHandler(self, name: "myAction")
let config = WKWebViewConfiguration()
config.userContentController = controller
// Add the WKWebView to the view
let frame = CGRectMake(20, 20, 200, 200)
let webView = WKWebView(frame: frame, configuration: config)
self.view.addSubview(webView)
// Load your HTML file
let url = NSBundle.mainBundle().URLForResource("mydoc", withExtension: "html")!
webView.loadFileURL(url, allowingReadAccessToURL: url)
// Pass reference to the view controller
self.webView = webView
}
// Handle the message posted by Javascript
func userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage) {
if let arr = message.body as? [Int] {
print(arr)
}
}
}
HTML + Javascript:
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Hello world</title>
<script type="text/javascript">
var arr = [];
function myFunction(number) {
arr.push(number);
// Send a message to your app on the myAction pipe
window.webkit.messageHandlers.myAction.postMessage(arr);
}
</script>
</head>
<body>
<a href="javascript:void(0)" onclick="myFunction(1)">element1</a>
<a href="javascript:void(0)" onclick="myFunction(2)">element2</a>
<a href="javascript:void(0)" onclick="myFunction(3)">element3</a>
</body>
</html>
相关文章:
- 如何遍历包含对象的数组-javascript
- 保存数组javascript
- 查找数组javascript中包含的元素类型
- 算法:从数组(javascript/angular)中按当前日期获取上一个和下一个事件
- 从多维数组javascript中提取特定值
- 如何在数组javascript中选择伪随机值
- 拆分字符串数组(JavaScript)后未定义
- 从数组JavaScript中删除并返回最后n个项的最快方法
- 使用条件for循环更新数组-Javascript
- 从数组javascript创建新对象
- 用数组(javascript)中的值替换regex捕获
- 从数组[Javascript]的总长度中减去一个干净的数字
- 将一个字符串数组解析为一个新的数组javascript
- 如何将对象转换为对象数组javascript
- 赢得't循环数组javascript
- 从不同的数组 JavaScript 中获取值
- 多维数组 JAVASCRIPT 出了点问题
- 可以't分配给一个对象数组javascript
- 比较数组JavaScript中的对象
- 如何完成缺少(连续)元素的数组|Javascript