在 Flutter 中 Webview 重定向到另一个页面时得到 Json 响应
Get Json response when Webview redirect to another page in Flutter
flutter_webview_plugin^0.3.11
我正在构建一个支付网关,在 3d 安全模式下我需要使用 Webview。使用 html 字符串类型的响应启动 Webview。
return Scaffold(
body: WebviewScaffold(
withJavascript: true,
key: _scaffoldKey,
url: new Uri.dataFromString(widget.d3sc, mimeType: 'text/html').toString(),
),
);
它在屏幕上打印安全代码阶段。当我提交代码时,它会自动重定向到回调 url,我无法连接或无法从这个 url 获得响应。我需要在提交代码并重定向页面以获取用于关闭 3d 安全支付的令牌时得到响应。有什么想法或解决方案吗?
尝试了以下代码。尽管它打印了重定向的 url,但响应元素中没有 json 响应。
webView.launch(new Uri.dataFromString(widget.d3sc, mimeType: 'text/html').toString() ,withJavascript: true, withLocalStorage: true);
webView.show();
webView.onUrlChanged.listen((String event) async {
print("${event} even eevent");
setState(() {
webView
.evalJavascript("document.documentElement.innerText")
.then((response) => print("$response response response "));
});
});
我不知道我找到了解决方案,因为 html 内容非常复杂。通过使用 webview_flutter 插件问题已排序。按原样构建您的小部件;
WebView(
initialUrl: new Uri.dataFromString(widget.d3sc, mimeType: 'text/html').toString(),
onWebViewCreated: (controller) {
_controller = controller;
},
javascriptMode: JavascriptMode.unrestricted,
gestureNavigationEnabled: true,
onPageFinished: (_) {
readResponse();
},
)
每当发生导航和页面打开完成时调用 readResponse 函数。我们可以使用以下函数将页面的 html 内容作为字符串获取;
void readResponse() async
{
setState(() {
_controller.evaluateJavascript("document.documentElement.innerHTML").then((value) async {
if(value.contains("name=\"paymentId\"")){
// value contains the html data of page as string
...
我无法将 html 数据转换为 json 映射,但我们可以通过简单地使用子字符串方法在该字符串中获得我们想要的任何内容。
注:本例使用webview_flutter版本^1.0.7解决
flutter_webview_plugin^0.3.11 我正在构建一个支付网关,在 3d 安全模式下我需要使用 Webview。使用 html 字符串类型的响应启动 Webview。
return Scaffold(
body: WebviewScaffold(
withJavascript: true,
key: _scaffoldKey,
url: new Uri.dataFromString(widget.d3sc, mimeType: 'text/html').toString(),
),
);
它在屏幕上打印安全代码阶段。当我提交代码时,它会自动重定向到回调 url,我无法连接或无法从这个 url 获得响应。我需要在提交代码并重定向页面以获取用于关闭 3d 安全支付的令牌时得到响应。有什么想法或解决方案吗?
尝试了以下代码。尽管它打印了重定向的 url,但响应元素中没有 json 响应。
webView.launch(new Uri.dataFromString(widget.d3sc, mimeType: 'text/html').toString() ,withJavascript: true, withLocalStorage: true);
webView.show();
webView.onUrlChanged.listen((String event) async {
print("${event} even eevent");
setState(() {
webView
.evalJavascript("document.documentElement.innerText")
.then((response) => print("$response response response "));
});
});
我不知道我找到了解决方案,因为 html 内容非常复杂。通过使用 webview_flutter 插件问题已排序。按原样构建您的小部件;
WebView(
initialUrl: new Uri.dataFromString(widget.d3sc, mimeType: 'text/html').toString(),
onWebViewCreated: (controller) {
_controller = controller;
},
javascriptMode: JavascriptMode.unrestricted,
gestureNavigationEnabled: true,
onPageFinished: (_) {
readResponse();
},
)
每当发生导航和页面打开完成时调用 readResponse 函数。我们可以使用以下函数将页面的 html 内容作为字符串获取;
void readResponse() async
{
setState(() {
_controller.evaluateJavascript("document.documentElement.innerHTML").then((value) async {
if(value.contains("name=\"paymentId\"")){
// value contains the html data of page as string
...
我无法将 html 数据转换为 json 映射,但我们可以通过简单地使用子字符串方法在该字符串中获得我们想要的任何内容。
注:本例使用webview_flutter版本^1.0.7解决