Flutter如何执行JavaScript
在Flutter中如何执行JavaScript代码?有没有内置的方法或者需要依赖第三方库?具体实现步骤是什么?能否提供一个简单的示例代码?另外,执行JavaScript时是否有性能或安全方面的限制需要注意?
2 回复
Flutter可通过webview_flutter插件加载WebView,在其中执行JavaScript。也可使用flutter_js引擎直接运行JS代码。前者适合嵌入网页,后者适合纯JS逻辑。
更多关于Flutter如何执行JavaScript的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中执行JavaScript代码,主要有以下几种方式:
1. 使用 webview_flutter 插件
这是最常用的方法,通过WebView加载HTML页面并执行JS代码。
添加依赖:
dependencies:
webview_flutter: ^4.4.2
示例代码:
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
class JavaScriptExecutor extends StatefulWidget {
@override
_JavaScriptExecutorState createState() => _JavaScriptExecutorState();
}
class _JavaScriptExecutorState extends State<JavaScriptExecutor> {
late WebViewController controller;
@override
void initState() {
super.initState();
controller = WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted)
..loadHtmlString('''
<html>
<body>
<div id="result"></div>
</body>
</html>
''');
}
// 执行JavaScript代码
void executeJavaScript() async {
String result = await controller.runJavaScriptReturningResult('''
document.getElementById("result").innerHTML = "Hello from JavaScript!";
return "执行完成";
''') as String;
print('JavaScript执行结果: $result');
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('执行JavaScript')),
body: WebViewWidget(controller: controller),
floatingActionButton: FloatingActionButton(
onPressed: executeJavaScript,
child: Icon(Icons.play_arrow),
),
);
}
}
2. 使用 flutter_js 插件
专门用于在Flutter中执行JavaScript的插件。
添加依赖:
dependencies:
flutter_js: ^0.7.0
示例代码:
import 'package:flutter_js/flutter_js.dart';
void executeJSWithFlutterJs() {
final jsRuntime = getJavascriptRuntime();
// 执行简单的JavaScript代码
final result = jsRuntime.evaluate('1 + 1');
print('计算结果: ${result.rawResult}');
// 执行函数
jsRuntime.evaluate('''
function greet(name) {
return "Hello, " + name + "!";
}
''');
final greeting = jsRuntime.evaluate('greet("World")');
print('函数调用结果: ${greeting.stringResult}');
}
3. 注意事项
- 性能考虑:WebView方式较重,适合需要完整浏览器环境的场景
- 安全性:注意防范XSS攻击,不要执行不可信的JS代码
- 平台差异:不同平台可能有细微的行为差异
选择哪种方式取决于你的具体需求。如果只是需要简单的JS计算,推荐使用flutter_js;如果需要完整的浏览器环境,则使用webview_flutter。

