当前位置:  开发笔记 > 编程语言 > 正文

AngularJS向iOS WKWebView发送消息

如何解决《AngularJS向iOSWKWebView发送消息》经验,为你挑选了1个好方法。

我在我的iOS应用程序中运行一个本地网络服务器,它为AngularJS应用程序提供服务,但我不知道如何在WKWebView和我的控制器之间进行通信.

在iOS中, viewDidLoad

WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init];
[wkWebConfig.userContentController addScriptMessageHandler:self name:@"interOp"];


self.webview = [[WKWebView alloc] initWithFrame:self.view.frame ];
[self.webview setBackgroundColor:self.view.backgroundColor];

[self.webview loadRequest:request];

从angularJS控制器,我需要获取wkwebview对象,但未定义:

$scope.showSettings = function(){
     //this is undefined
    window.webkit.messageHandlers.interOp.postMessage(message)
}

如果我在head我的网页标签中尝试它,它完全正常.


我究竟做错了什么 ?



1> Josue Alexan..:

你没有做错任何事情,一些邪恶的框架和库覆盖window.webkit全局,我不确定是哪一个,但通过一些测试,我相信你可以找到.

要解决此问题,您需要在任何干扰脚本覆盖之前缓存全局.

这可以在位于文档头部的JavaScript中或通过注入在Objective-C中完成.

使用Javascript

...

繁荣,你的变量是安全和健全的 window.myUniqueNamespace.messageHandlers

Objective-C的

NSString *myScriptSource = @"(function() {window.myUniqueNamespace.messageHandlers=window.webkit.messageHandlers;}());";
WKUserScript *myUserScript = [[WKUserScript alloc]
 initWithSource:myScriptSource
 injectionTime:WKUserScriptInjectionTimeAtDocumentStart
 forMainFrameOnly:YES];

*注意:我没有办法测试这个或有Objective-C的经验,但我在JavaFX的webkit webview上遇到了类似的问题.

这是关于WebKit API的有用演示文稿

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有