当有最终的 Completer 时,如何让我注入的 javascript 代码出现?
How do I make my injected javascript code appear when theres a final Completer?
嗨,我是 Flutter 的新手,这是我完成第一个应用程序时唯一剩下的问题,由于某种原因,我使用的注入 javascript 没有出现在 WebView 应用程序中。
FIXED (sorry for the delayed edit: the code was (await _controller.future).evaluateJavascript("document.getElementsByClassName('footer-container')[0].style.display='none';")
Note: Im using the webview_flutter by the flutter dev team and I want to have BOTH refresh FAB and injected code working at the same time
我的代码如下:
import 'dart:async';
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
class HomePage extends StatefulWidget {
HomePage({Key key}) : super(key: key);
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
WebViewController _myController;
final Completer<WebViewController> _controller =
Completer<WebViewController>();
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: WebView(
initialUrl: 'https://syncshop.online/en/',
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (controller) {
_controller.complete(controller);
},
onPageFinished: (controller) {
_myController.evaluateJavascript("document.getElementsByClassName('footer-container')[0].style.display='none';");
},
),
floatingActionButton: FutureBuilder<WebViewController>(
future: _controller.future,
builder: (BuildContext context, AsyncSnapshot<WebViewController> controller) {
if (controller.hasData) {
return FloatingActionButton(
onPressed: () {
controller.data.reload();
},
child: Icon(Icons.refresh),
);
}
return Container();
}),
),
);
}
}
我认为,_myController
没有分配任何东西。
所以,请尝试使用 _controller
代替 evaluateJavascript()
。像这样:
(await _controller.future).evaluateJavascript("document.getElementsByClassName('footer-container')[0].style.display='none';");
嗨,我是 Flutter 的新手,这是我完成第一个应用程序时唯一剩下的问题,由于某种原因,我使用的注入 javascript 没有出现在 WebView 应用程序中。
FIXED (sorry for the delayed edit: the code was (await _controller.future).evaluateJavascript("document.getElementsByClassName('footer-container')[0].style.display='none';")
Note: Im using the webview_flutter by the flutter dev team and I want to have BOTH refresh FAB and injected code working at the same time
我的代码如下:
import 'dart:async';
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
class HomePage extends StatefulWidget {
HomePage({Key key}) : super(key: key);
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
WebViewController _myController;
final Completer<WebViewController> _controller =
Completer<WebViewController>();
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: WebView(
initialUrl: 'https://syncshop.online/en/',
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (controller) {
_controller.complete(controller);
},
onPageFinished: (controller) {
_myController.evaluateJavascript("document.getElementsByClassName('footer-container')[0].style.display='none';");
},
),
floatingActionButton: FutureBuilder<WebViewController>(
future: _controller.future,
builder: (BuildContext context, AsyncSnapshot<WebViewController> controller) {
if (controller.hasData) {
return FloatingActionButton(
onPressed: () {
controller.data.reload();
},
child: Icon(Icons.refresh),
);
}
return Container();
}),
),
);
}
}
我认为,_myController
没有分配任何东西。
所以,请尝试使用 _controller
代替 evaluateJavascript()
。像这样:
(await _controller.future).evaluateJavascript("document.getElementsByClassName('footer-container')[0].style.display='none';");