Typescript 中的 window.webkit

问题描述 投票:0回答:4

我需要将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”。

javascript angular typescript webkit
4个回答
10
投票

您可以使用类型断言 (https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html) 临时转换

window
any
类型。不过,您将失去该声明的智能感知。

(window as any).webkit.messageHandlers

4
投票

我认为

window.webkit
与标准相差甚远,因此它不属于 Typescript 中
window
类型的一部分。您可以这样添加:

interface Window {
    webkit?: any;
}

declare var window: Window;

注意,

webkit?
表示该属性是可选的,因此您应该检查该属性是否存在。


0
投票

只需添加任何加载的打字稿文件即可。

declare global{
  interface Window {
    webkit?: {
      messageHandlers: {
        [x:string]: {
          postMessage: (data: string) => void;
        };
    };
  };
};

-1
投票

如果你没有忘记 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);

参考:

https://developer.apple.com/library/ios/documentation/WebKit/Reference/WKUserContentController_Ref/index.html#//apple_ref/occ/instm/WKUserContentController/addScriptMessageHandler:名称:

© www.soinside.com 2019 - 2024. All rights reserved.