我是一名在韩国工作的初级 Flutter 工程师!我有一个关于我的项目的问题。如果您能分享此特定问题(或类似问题)的解决方案,将不胜感激。
我的问题:我想在 Flutter inappwebview 包的 MyChromeSafariBrowser() 中使用 JavaScriptChannel。可以在其中使用 JavaScriptChannel 吗?
有些人可能会建议 InAppBrowser、HeadlessInAppWebView、InAppWebView 可能是一个选项,但是,在我的情况下,我无法访问/使用。
此 HTML 源代码的目的是什么:我们链接特定网页以获得使用隐私数据的同意。用户输入他们的签名,然后输入确认按钮。然后
JavaScript频道代码
// webview -> send data to the app
function send_agree_result(result) {
// distinguish IOS or Android
var isMobile = {
Android: function () {
return navigator.userAgent.match(/Android/i) == null ? false : true;
},
iOS: function () {
return navigator.userAgent.match(/iPhone|iPad|iPod/i) == null ? false : true;
},
any: function () {
return (isMobile.Android() || isMobile.iOS());
}
};
if (isMobile.any()) {
if (isMobile.Android()) {
window.bridge.sendResultAgree(result); // 안드로이드(android)
} else if (isMobile.iOS()) {
webkit.messageHandlers.sendResultAgree.postMessage(result); // 아이폰(ios)
}
}
}
这个 JavascriptChannel 函数将被操作。该应用程序可以从网站上获得“是或否”。然后下一步将在 App 中开始。
Flutter inappwebview 代码
import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
void GeneAgreeView({String id}){
final ChromeSafariBrowser browser = MyChromeSafariBrowser();
InAppWebViewController webViewController;
final GlobalKey webViewKey = GlobalKey();
ChromeSafariBrowserClassOptions options = ChromeSafariBrowserClassOptions(
android: AndroidChromeCustomTabsOptions(addDefaultShareMenuItem: true),
ios: IOSSafariOptions(barCollapsingEnabled: true,
));
PullToRefreshController pullToRefreshController = PullToRefreshController(
options: PullToRefreshOptions(
color: Colors.blue,
),
onRefresh: () async {
if (Platform.isAndroid) {
webViewController?.reload();
} else if (Platform.isIOS) {
webViewController?.loadUrl(
urlRequest: URLRequest(url: await webViewController?.getUrl()));
}
},
);
browser.open(
url: Uri.parse("https://www.my-genomestory.com/agreements/index/bestf/?service=genome&clientKey=$id&machine=app"),
options: ChromeSafariBrowserClassOptions(
android: AndroidChromeCustomTabsOptions(addDefaultShareMenuItem: false),
ios: IOSSafariOptions(barCollapsingEnabled: true)));
}
class MyChromeSafariBrowser extends ChromeSafariBrowser {
@override
void onOpened() {
print("ChromeSafari browser opened");
}
@override
void onCompletedInitialLoad() {
print("Chrome")}