首页 > 解决方案 > Flutter webview 与 Angular 的双向通信

问题描述

我有 webview 的问题。我被从 js 通信到颤动但是。我在IOS模拟器上有这个问题。

怎么办:我想在flutter上点击btn,在js func上处理。

我的颤振代码:

    late WebViewController _controller;
    .....
    onWebViewCreated: (WebViewController controller) =>
          {_controller = controller},
    ...
    floatingActionButton: FloatingActionButton(

    child: const Icon(Icons.arrow_upward),
    onPressed: () {
      _controller.evaluateJavascript('fromFlutter("From Flutter")');
    },
  ),

在 Js 方面,我有简单的 Angular 应用程序,带有经典的 AppComponent:

 import { Component } from '@angular/core';
 declare const window: any;
 @Component({
   selector: 'app-root',
   templateUrl: './app.component.html',
   styleUrls: ['./app.component.css']
 })
 export class AppComponent {
 title = 'testWebViewHandlers';
  constructor() {}


  fromFlutter(newTitle: any) {
   this.title = newTitle;
  }
}

当我点击颤动 btn 我有这个错误

[VERBOSE-2:ui_dart_state.cc(209)] 未处理的异常:PlatformException(evaluateJavaScript_failed,评估 JavaScript 失败,JavaScript 字符串为:'fromFlutter("From Flutter")' 错误域 = WKErrorDomain Code=4 "发生 JavaScript 异常" UserInfo ={WKJavaScriptExceptionLineNumber=0, WKJavaScriptExceptionMessage=TypeError: undefined is not a function, WKJavaScriptExceptionColumnNumber=0, NSLocalizedDescription=A JavaScript exception occurred}, null) #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:607: 7)#1 MethodChannel._invokeMethod(包:flutter/src/services/platform_channel.dart:156:18)

我已经在使用 JavascriptChannel 来处理点击表单 js 来颤动并且它的工作正常。

谢谢帮助

解决方案 :

要获取窗口对象中组件的上下文,您可以将其添加为此。在 Angular 构造函数或初始化中:

窗口['AppComponent'] = 这个; (“AppComponent”或任何其他)

然后你可以在控制台中访问评估JavaScript。

在颤振中:

   webView.evaluateJavascript(source: "window.AppComponent.fromFlutter('test')");

标签: iosangulartypescriptflutter

解决方案


推荐阅读