私は韓国で働いているジュニア Flutter エンジニアです。プロジェクトに関する問題があります。この特定の問題 (またはこれに類似したもの) の解決策を共有していただければ幸いです。
私の質問: Flutter inappwebview パッケージの MyChromeSafariBrowser() で JavaScriptChannel を使用したいと考えています。これで JavaScriptChannel を使用することは可能ですか?
InAppBrowser、HeadlessInAppWebView、InAppWebView がオプションであると示唆する人もいるかもしれませんが、私の状況ではアクセス/利用できません。
この HTML ソースの目的: 特定の Web ページにリンクして、プライバシー データの使用について同意を得ています。ユーザーは署名を入力し、確認ボタンを入力します。それで
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 関数が動作します。また、アプリはウェブサイトから「はいまたはいいえ」を取得できます。その後、アプリで次のステップが開始されます。
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")}