TypeScript 中的 window.webkit

5
我需要将一个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) 中的错误:error TS2339:类型 'Window' 上不存在属性 'webkit'。

3个回答

10

4
我认为window.webkit与标准相差很远,因此它不是Typescript中window类型的一部分。您可以像这样添加它:
interface Window {
    webkit?: any;
}

declare var window: Window;

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

我应该将这段代码添加到哪里?我将其添加到函数中,编译时出现错误:"ERROR in src/app/sms-validation/sms-validation.component.ts(105,5): error TS1184: Modifiers cannot appear here." - Nassim El gazzah
如果您将其添加到同一文件中,它必须是一个模块:http://www.typescriptlang.org/play/#code/KYDwDg9gTgLgBAbwL4G4BQaAmwDGAbAQymDgHM8IAjAvRNOOASwDsZgoAzAnEgdRcwQA7nQYMhwSgGtGMAPwAuOAWYBPdAyRotaIQOEA6CdNlwAZGbh7mgoUckyYRgBYE2AN3YAKAJQogA - Phillip

-1

我猜你正在使用webView,如果你没有忘记window.webkit。 你必须首先定义它,默认情况下没有对象(在window中):

  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:name:


问题涉及到Web端TypeScript代码,而不是iOS代码。我已经完成了这部分工作,但需要调整Window的TypeScript接口。 - Austin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接