我需要将javascript代码重写为typescript(Angular),网页由IOS应用程序或Android应用程序打开。我只想向应用程序发送消息。
我该如何向父应用程序发送消息或如何使用
window.webkit
?
notifyTheApp(postData) {
if (navigator.userAgent.match(/(iPod|iPhone|iPad)/)) {
if(window.webkit.messageHandlers)
window.webkit.messageHandlers.mpos.postMessage(JSON.stringify(postData));
}
else {
if(window.external.notify)
window.external.notify(JSON.stringify(postData));
}
mpos
是 iOS 应用程序
src/app/sms-validation/sms-validation.component.ts(98,17)中的错误:错误TS2339:“Window”类型上不存在属性“webkit”。
您可以使用类型断言 (https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html) 临时转换
window
any
类型。不过,您将失去该声明的智能感知。
(window as any).webkit.messageHandlers
我认为
window.webkit
与标准相差甚远,因此它不属于 Typescript 中 window
类型的一部分。您可以这样添加:
interface Window {
webkit?: any;
}
declare var window: Window;
注意,
webkit?
表示该属性是可选的,因此您应该检查该属性是否存在。
只需添加任何加载的打字稿文件即可。
declare global{
interface Window {
webkit?: {
messageHandlers: {
[x:string]: {
postMessage: (data: string) => void;
};
};
};
};
如果你没有忘记 window.webkit ,我猜你正在使用 webView 。 你必须先定义它,默认情况下没有对象(在窗口中):
window.webkit
只需添加:
let contentController = self.webView.configuration.userContentController
contentController.addScriptMessageHandler(self, name: "callbackHandler")
let config = WKWebViewConfiguration()
config.userContentController = contentController
let webView = WKWebView(frame: CGRect.zero, configuration: config)
// Add callback func
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
// message.name is "callbackHandler"
// message.body is ["programming":"js"]
}
现在你可以在浏览器环境中调用:
var message = {'programming':'js'};
window.webkit.messageHandlers.callbackHandler.postMessage(message);
参考: