如何解决如何在带有动态 url 的 IOS 中使用 WebView?
我有一个动态 html url ('https://...../tokens,headers etc./example.html')。我在 url 中放置了 cookie 设置。这是我的 webview 类,它在 Android 上运行良好。但在 IOS 上,只有加载小部件处于活动状态。网络视图不起作用。控制台上没有错误或警告。我还将以下代码添加到 info.plist:
<key>io.flutter.embedded_views_preview</key><true/>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSAllowsArbitraryLoadsInWebContent</key>
<true/>
</dict>
我的 webview 小部件仍然无法正常工作。我尝试了许多 webview 插件,但它们都不适用于我的问题。如果我使用任何其他网址,它就可以正常工作。一切都在颤振医生上更新。 Xcode 12.3 版。 这是使用inappwebview插件的代码;
class MyWebView extends StatefulWidget {
final String title;
final String selectedUrl;
MyWebView({
@required this.title,@required this.selectedUrl,});
@override
_MyWebViewState createState() => _MyWebViewState();
}
class _MyWebViewState extends State<MyWebView> {
num position = 1;
String token;
String tenant;
String roleID;
String path;
/*final Completer<WebViewController> _controller =
Completer<WebViewController>();
*/
final flutterWebviewPlugin = new FlutterWebviewPlugin();
final Set<JavascriptChannel> jsChannels = [
JavascriptChannel(
name: 'Print',onMessageReceived: (JavascriptMessage message) {
print(message.message);
}),].toSet();
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
await _getTenant().then((v) {
setState(() {
this.tenant = v;
});
});
});
WidgetsBinding.instance.addPostFrameCallback((_) async {
await _getToken().then((v) {
setState(() {
this.token = v;
});
});
});
WidgetsBinding.instance.addPostFrameCallback((_) async {
await _getRoleId().then((v) {
setState(() {
this.roleID = v;
});
});
});
WidgetsBinding.instance.addPostFrameCallback((_) async {
await _getDefaultPath().then((v) {
setState(() {
this.path = v;
});
});
});
}
@override
Widget build(BuildContext context) {
print('url ->>> ' + widget.selectedUrl);
return new MaterialApp(
routes: {
"/": (_) => new WebviewScaffold(
headers: {
'tenant': this.tenant,'ORA_BIPS_NQID': this.token,'roles': this.roleID
},url: widget.selectedUrl,javascriptChannels: jsChannels,appBar: new AppBar(
leading: IconButton(
icon: Icon(Icons.arrow_back,color: Colors.white),onPressed: () => Navigator.of(context).pop(),),backgroundColor: Colors.grey,title: new Text("Vispeahen"),withZoom: true,withLocalStorage: true,hidden: true,initialChild: Container(
color: Colors.white,child: const Center(
child: CircularProgressIndicator(),},);
}
}
这是 Flutter 的 WebView 插件;
class MyWebView extends StatefulWidget {
final String title;
final String selectedUrl;
MyWebView({
@required this.title,});
@override
_MyWebViewState createState() => _MyWebViewState();
}
class _MyWebViewState extends State<MyWebView> {
num position = 1;
final Completer<WebViewController> _controller =
Completer<WebViewController>();
@override
void initState() {
super.initState();
WebView.platform = SurfaceAndroidWebView();
}
@override
Widget build(BuildContext context) {
print('url ->>> ' + widget.selectedUrl);
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.grey,title: Text(widget.title),body: IndexedStack(
index: position,children: <Widget>[
WebView(
initialUrl: widget.selectedUrl,onPageStarted: (value) {
setState(() {
position = 1;
});
},onPageFinished: (value) {
setState(() {
position = 0;
});
},javascriptMode: JavascriptMode.unrestricted,onWebViewCreated: (WebViewController webViewController) {
_controller.complete(webViewController);
},navigationDelegate: (NavigationRequest nav) {
print(
'SAW REQ TO LOAD: ${nav.url}\nIN MAIN FRAME? ${nav.isForMainFrame}');
return NavigationDecision.navigate;
}),Container(
child: Center(child: CircularProgressIndicator()),],));
}
}
它给了我同样的结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。