在FlatterWebView中运行一些Javascript

在FlatterWebView中运行一些Javascript,javascript,webview,dart,flutter,Javascript,Webview,Dart,Flutter,如何在flatter_webview_插件中运行Javascript。我用这个试试 onPressed: () { flutterWebviewPlugin.evalJavascript('<script language="JavaScript" type="text/javascript">alert("Hello World")</script>'); }, onPressed:(){ flatte

如何在flatter_webview_插件中运行Javascript。我用这个试试

onPressed: () {
   flutterWebviewPlugin.evalJavascript('<script language="JavaScript" type="text/javascript">alert("Hello World")</script>');
},
onPressed:(){
flatterWebViewPlugin.evalJavascript('alert(“Hello World”));
},
但什么也没发生

我认为使用WebViewPlugin.evalJavascript可以在Webview中运行Javascript。
我做错了吗?

我已经调试了
flatter\u webview\u插件的iOS部分

flutterWebviewPlugin.evalJavascript('<script language="JavaScript" type="text/javascript">alert("Hello World")</script>')
iOS部分 发现它与iOS本机部分相关

实现代码的良好示例位于

我已经为此创建了一个

临时溶液 你可以用

flutter_webview_plugin:
    git:
      ref: "dev/fix_alert_not_work_in_webview"
      url: "https://github.com/jerryzhoujw/flutter_webview_plugin"
      source: git
在合并之前,这是pubspec.yaml中的temp。

您可以尝试my plugin,它是一个flatter插件,允许您添加内联网络视图或打开应用程序内浏览器窗口,并具有许多事件、方法和选项来控制网络视图

要运行一些js,您可以使用:

  • Future evaluateJavascript({@required String source})
    :将JavaScript代码计算到WebView中,并返回计算结果
  • Future injectJavascriptFileFromUrl({@required String urlFile})
    :从定义的url将外部JavaScript文件注入WebView
  • Future injectJavascriptFileFromAsset({@required String assetFilePath})
    :将JavaScript文件从Flatter assets目录注入WebView(请参阅有关如何从assets文件夹加载文件的更多信息)
完整示例:

导入'dart:async';
进口“包装:颤振/材料.省道”;
导入“包:flatter_inappwebview/flatter_inappwebview.dart”;
Future main()异步{
runApp(新的MyApp());
}
类MyApp扩展了StatefulWidget{
@凌驾
_MyAppState createState()=>new_MyAppState();
}
类MyAppState扩展了状态{
@凌驾
void initState(){
super.initState();
}
@凌驾
无效处置(){
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回材料PP(
主页:InAppWebViewPage()
);
}
}
类InAppWebViewPage扩展了StatefulWidget{
@凌驾
_InAppWebViewPageState createState()=>新建;
}
类_InAppWebViewPageState扩展状态{
inappwebview控制器webView;
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“InAppWebView”)
),
主体:容器(
子项:列(子项:[
扩大(
子:容器(
子:InAppWebView(
初始URL:“https://www.example.org/",
initialHeaders:{},
initialOptions:InAppWebViewWidgetOptions(
inappwebview选项:inappwebview选项(
debuggingEnabled:true,
),
),
onWebViewCreated:(InAppWebViewController){
网络视图=控制器;
},
onLoadStart:(InAppWebViewController控制器,字符串url){
},
onLoadStop:(InAppWebViewController控制器,字符串url)异步{
int-result1=await-controller.evaluateJavascript(源代码:“10+20;”);
打印(结果1);//30
String result2=await controller.evaluateJavascript(源:“”
var firstname=“Foo”;
var lastname=“Bar”;
firstname+“”+lastname;
""");
打印(结果2);//Foo-Bar
//从url注入javascript文件
等待控制器。injectJavascriptFileFromUrl(urlFile:)https://code.jquery.com/jquery-3.3.1.min.js");
//等待jquery被加载
等待未来。延迟(持续时间(毫秒:1000));
字符串result3=await controller.evaluateJavascript(源:“\$('body').html();”;
打印(result3);//打印正文html
//从资产文件夹注入javascript文件
等待controller.injectJavascriptFileFromAsset(assetFilePath:“assets/myJavascriptFile.js”);
},
),
),
),
]))
);
}
}

好吧,什么也没发生,因为FlatterWebView不支持javascript警报功能。尝试编写一个javascript函数来更改HTML元素的innerText的值,然后使用.evalJavascript调用该函数以查看结果。

这就是Webview小部件的外观

WebView(
    initialUrl: 'http://<domain>',
    javascriptMode: JavascriptMode.unrestricted,
    onWebViewCreated: (WebViewController webViewController) {
      webViewController.evaluateJavascript(
          'alert('hello from flutter)');
    }
WebView(
initialUrl:'http://',
javascriptMode:javascriptMode.unrestricted,
onWebViewCreated:(WebViewController WebViewController){
webViewController.evaluateJavascript(
'警报('来自颤振的你好');
}

使用
webViewController
代码中的任何地方

我尝试了它,但没有任何结果。该网站在WebviewScaffold小部件中打开,该小部件包含一个带有图标按钮的appBar,可能是这里的错误?现在我在控制台中得到了SyntaxError。I/chromium(14510):[信息:控制台(1)]“未捕获的SyntaxError:缺少)参数列表后”,来源:(1)哦,很抱歉,这是一个“to mutch”。我的错。但它仍然不起作用。我直接从我的设备而不是从模拟器上尝试它。好的,它可以在控制台中打印或在文本字段中写入,但不能在警报或窗口中工作。打开。可能更多不起作用know@Günter我可以运行这个:view.loadUrl(“javascript:(function(){“+”var head=document.getElementsByClassName('header')[0].style.display='none';“+如何在此插件中单击元素?如何检查用户是否按下了页面上的某个元素?嗨@Lorenzo Pichilli,我正在尝试使用Stripe的示例。因此,我的JS
flutter_webview_plugin:
    git:
      ref: "dev/fix_alert_not_work_in_webview"
      url: "https://github.com/jerryzhoujw/flutter_webview_plugin"
      source: git
WebView(
    initialUrl: 'http://<domain>',
    javascriptMode: JavascriptMode.unrestricted,
    onWebViewCreated: (WebViewController webViewController) {
      webViewController.evaluateJavascript(
          'alert('hello from flutter)');
    }