Flutter - 如何在WebView中获取Javascript回调?

4
我正在使用一个WebView来加载包含回调的本地HTML文件 -
function onReward(data){
console.log("onReward: " + data.earnedThisSession);
Survey.postMessage(data.earnedThisSession);
}

这个回调会在用户完成操作时被触发,我目前遇到两个问题:
  1. 由函数返回的data.earnedThisSession因用户而异,我想在我的dart代码中将其作为变量获取以奖励我的用户。
  2. WebView依赖项未在我的调试控制台中打印控制台消息。
这是我的JavascriptChannel:
final Set<JavascriptChannel> jsChannels = [
  JavascriptChannel(
      name: 'Survey',
      onMessageReceived: (JavascriptMessage message) {
        print(message.message);
      }),
].toSet();

这是我的WebviewScaffold -
FutureBuilder<String>(
              future: _loadLocalHTML(),
              builder: (context, snapshot) {
                if (snapshot.hasData) {
                  return Scaffold(
                    appBar: AppBar(),
                    body: WebView(
                      initialUrl: Uri.dataFromString(
                        snapshot.data,
                        mimeType: 'text/html',
                        encoding: Encoding.getByName('utf-8'),
                      ).toString(),
                      javascriptChannels: jsChannels,
                      javascriptMode: JavascriptMode.unrestricted,
                    ),
                  );
                }

我该如何使用evalJavascript来获取我的奖励数据?

你正在使用有状态的小部件吗? - Darlan Dieterich
是的 @DarlanDieterich - Arnav
@DarlanD。我不明白为什么你在没有响应上下文的情况下写注释。这是什么意思?尝试为此答案定义一个不同的initialUrl? - bl4ckr0se
1个回答

0

Survey.postMessage() 更改为 window.Survey.postMessage() 可能会起作用。我不确定如何在 WebviewScaffold 中使用 evalJavascipt,我是这样使用的:

final _webView = new FlutterWebviewPlugin();
final Set<JavascriptChannel> jsChannels = [
  JavascriptChannel(
      name: 'Survey',
      onMessageReceived: (JavascriptMessage message) {
        print(message.message);
      }),
].toSet();
_webView.launch(url, jsChannels);
_webView.onStateChanged.listen((event) {
  if (event.type == WebViewState.finishLoad) {
    _webView.evalJavascript('Your Js Code' + 
    'window.Survey.postMessage("Your Return Mes.")');
  }
});

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