当前位置: 首页 > news >正文

云南网站建设快速优化seo中文含义

云南网站建设快速优化,seo中文含义,云端建站快车,网页设计项目报告总结long time no see. 如果觉得该方案helps,点个赞,评论打个call,这是我前进的动力~ 通常写法: 项目里用的webview_flutter 正常webview处理返回事件 if (await controller.canGoBack()) {controller.goBack(); } else {Navigator…

long time no see. 如果觉得该方案helps,点个赞,评论打个call,这是我前进的动力~

通常写法:

项目里用的webview_flutter
正常webview处理返回事件

if (await controller.canGoBack()) {controller.goBack();
} else {Navigator.pop(context);
}

就是h5历史栈,一直退栈,如果栈内元素只有一个了,就直接关闭webview的页面了。


问题描述:

正常情况是没问题的的。
比如A-->B-->C,一直触发返回事件的话,逻辑是C-->B,B-->A, A直接关。
如果h5里有重定向的话,就有问题了。
比如A(A1重定向到A2)-->B-->C,一直触发返回事件的话,逻辑是C-->B,B-->A2, A2-->A1-->A2,A2-->A1-->A2...
导致webview界面一直退不出来。

解决方案:

参考https://github.com/flutter/flutter/issues/137737,拉到最下面
设定pageFinished后xxx毫秒内NavigationRequest触发,判定为重定向。逻辑:已知A1重定向A2,此时触发返回事件,A2返回到A1,在A1准备重定向到A2的时候,根据条件判断为重定向然后进行阻断,并再次执行一次返回逻辑。
另外该issue原始代码还是有问题,没有考虑到NavigationRequest可能跑在onPageFinished前面,故自己添加了轮询等待的代码。
注意:这只是workaround,极端情况下并不能做到100%可靠。必要情况可以考虑跟h5相关开发,约定不用重定向或改用其它方案。

自己在android设备上实测了下,还是挺稳定的。

几种可以考虑的方案:
1.修改flutter_webview源码,上传到github,然后在自己的仓库引用该库。(该方案可以自己去修改到android测和ios测的相关代码,比如flutter_webview没提供忽略ssl证书报错和ssl证书检查的问题就可以通过该方式解决,感兴趣的话可以上网查一查)
2.换webview的库,比如用flutter_inappwebview,该库提供更强大的原生api支持,围绕这个库的api来尝试解决。也是很流行的库,但不是官方flutter.dev出品。

解决代码:

如下

class WebPageContainer extends StatefulWidget {const WebPageContainer({super.key});@overrideState<WebPageContainer> createState() => _WebPageContainerState();
}class _WebPageContainerState extends State<WebPageContainer> {late WebViewController controller;String url = '';bool _backEventTriggered = false;DateTime? _lastedPageFinishedTime;bool _pageIsFinished = false;@overridevoid initState() {super.initState();}@overridevoid didChangeDependencies() {final Map<String, dynamic>? arguments = ModalRoute.of(context)?.settings.arguments as Map<String, dynamic>?;if (arguments != null) {url = arguments['url'] ?? '';debugPrint('third---url:$url');}super.didChangeDependencies();_initWebViewController();}// web端调用// <button onclick="jump()">打开一个新的webpage</button>// function jump() {//   var msg = "https://www.baidu.com"//   if (toNewWebPage) {//     toNewWebPage.postMessage(msg);//   }// }// getStatusBarHeight用法// h5页面调用getStatusBarHeight,同上// h5页面同时要定义onStatusBarHeightReceived,该方法是flutter测获取完高度后调用的// 例如:// function onStatusBarHeightReceived(height) {//   // 显示状态栏高度//   document.getElementById('statusBarHeight').innerText = 'Status Bar Height: ' + height;// }void _initWebViewController() {controller = WebViewController()..setJavaScriptMode(JavaScriptMode.unrestricted)..setBackgroundColor(const Color(0x00000000))..setNavigationDelegate(NavigationDelegate(onProgress: (int progress) {// debugPrint('WebPage onProgress $progress');},onPageStarted: (String url) {_pageIsFinished = false;debugPrint('WebPage onPageStarted $url');},onPageFinished: (String url) async {debugPrint('WebPage onPageFinished $url');_pageIsFinished = true;if (_backEventTriggered) {_lastedPageFinishedTime = DateTime.now();} else {_lastedPageFinishedTime = null;}},onWebResourceError: (WebResourceError error) {},onNavigationRequest: (NavigationRequest request) async {debugPrint('WebPage onNavigationRequest ${request.url}');debugPrint('WebPage onNavigationRequest isMainFrame ${request.isMainFrame}');//轮询,因为onNavigationRequest可能跑在onPageFinished前面,强制等待while (!_pageIsFinished) {await Future.delayed(Duration(milliseconds: 10));}if (_shouldApplyNavLockout()) {goBack(); //执行第二次backreturn NavigationDecision.prevent;}return NavigationDecision.navigate;},onUrlChange: (UrlChange change) {print('WebPage onUrlChange ${change.url}');}),)..addJavaScriptChannel('destoryCurrentPage', onMessageReceived: (JavaScriptMessage message) {//h5自己的返回键,返回到最后一步,当前页面出栈debugPrint('====destoryCurrentPage====');Nav.pop();})..addJavaScriptChannel('toNewWebPage', onMessageReceived: (JavaScriptMessage message) {//允许h5页面打开新的third_web_pageNav.push(routerName: RouterPathModuleCommon.WebPageContainer, arguments: {'url': message.message});})..addJavaScriptChannel('toLogin', onMessageReceived: (JavaScriptMessage message) {//login:有些h5页面跳转后需要登录的  logout:可能存在的h5页面提供登出功能Nav.push(routerName: RouterPathModuleAccount.LoginPage, arguments: {'url': message.message});})..addJavaScriptChannel('getStatusBarHeight', onMessageReceived: (JavaScriptMessage message) {double statusBarHeight = MediaQuery.of(context).padding.top;controller.runJavaScriptReturningResult("onStatusBarHeightReceived('$statusBarHeight')").then((value) => print("发送statusBarHeight成功"));});controller.loadRequest(Uri.parse(url));}// 判断重定向的条件: 最近一次pageFinished和navigationRequest小于xxx毫秒。 这只是个workaround,并不是十全十美的方案bool _shouldApplyNavLockout() {final timestamp = _lastedPageFinishedTime;_lastedPageFinishedTime = null;// TODO make the threshold time configurable.if (timestamp != null) {debugPrint('WebPage diff timestamp ${DateTime.now().difference(timestamp!)}');}return timestamp != null && DateTime.now().difference(timestamp) < const Duration(milliseconds: 150);}void goBack() async {if (await controller.canGoBack()) {_backEventTriggered = true;controller.goBack();} else {Navigator.pop(context);}}@overrideWidget build(BuildContext context) {return Scaffold(body: WillPopScope(onWillPop: () async {goBack();return false;},child: WebViewWidget(controller: controller),),);}
}


文章转载自:
http://dinncoldc.knnc.cn
http://dinncohieroglyph.knnc.cn
http://dinncoidg.knnc.cn
http://dinncowhitetail.knnc.cn
http://dinncoindustrial.knnc.cn
http://dinncoscam.knnc.cn
http://dinncoforedone.knnc.cn
http://dinncostaghound.knnc.cn
http://dinncorebounder.knnc.cn
http://dinncomuscly.knnc.cn
http://dinncorecidivist.knnc.cn
http://dinncobarrathea.knnc.cn
http://dinncopled.knnc.cn
http://dinncobanting.knnc.cn
http://dinncojotter.knnc.cn
http://dinncoirretention.knnc.cn
http://dinncokusso.knnc.cn
http://dinncoarrogant.knnc.cn
http://dinncomisogamist.knnc.cn
http://dinncohydrocinnamic.knnc.cn
http://dinncohystricomorph.knnc.cn
http://dinncoideologue.knnc.cn
http://dinncochloroplatinic.knnc.cn
http://dinncosquatter.knnc.cn
http://dinncooblong.knnc.cn
http://dinncotelurate.knnc.cn
http://dinncosummary.knnc.cn
http://dinncoexopodite.knnc.cn
http://dinncocompunication.knnc.cn
http://dinncounmutilated.knnc.cn
http://dinncoprecarcinogen.knnc.cn
http://dinncoequidistance.knnc.cn
http://dinncounjealous.knnc.cn
http://dinncomiry.knnc.cn
http://dinncononaddictive.knnc.cn
http://dinncocolourless.knnc.cn
http://dinncopesthole.knnc.cn
http://dinncoinsolence.knnc.cn
http://dinncoft.knnc.cn
http://dinncofodgel.knnc.cn
http://dinncoparmigiana.knnc.cn
http://dinncoprobability.knnc.cn
http://dinncodiverger.knnc.cn
http://dinncocoati.knnc.cn
http://dinncosackful.knnc.cn
http://dinncoisograph.knnc.cn
http://dinncounscratched.knnc.cn
http://dinncophilhellenist.knnc.cn
http://dinncoprotractile.knnc.cn
http://dinncounivallate.knnc.cn
http://dinnconeuropathy.knnc.cn
http://dinncopampas.knnc.cn
http://dinncochoirgirl.knnc.cn
http://dinncoarrivisme.knnc.cn
http://dinncorife.knnc.cn
http://dinncogoofy.knnc.cn
http://dinncomucin.knnc.cn
http://dinncoexcursus.knnc.cn
http://dinncowashcloth.knnc.cn
http://dinncoarenulous.knnc.cn
http://dinncomylohyoideus.knnc.cn
http://dinncolactone.knnc.cn
http://dinncorappen.knnc.cn
http://dinncotoposcopy.knnc.cn
http://dinncomoneyman.knnc.cn
http://dinncoalleviative.knnc.cn
http://dinncodrastic.knnc.cn
http://dinncounbailable.knnc.cn
http://dinncocreatureliness.knnc.cn
http://dinncoxeromorphic.knnc.cn
http://dinncopriestless.knnc.cn
http://dinncomachodrama.knnc.cn
http://dinncoveritably.knnc.cn
http://dinncobaccara.knnc.cn
http://dinncoclemency.knnc.cn
http://dinncoscrutineer.knnc.cn
http://dinncoavengingly.knnc.cn
http://dinncosnuggish.knnc.cn
http://dinncobasement.knnc.cn
http://dinncoprefixion.knnc.cn
http://dinncocarriageable.knnc.cn
http://dinncoassuringly.knnc.cn
http://dinncometallurgy.knnc.cn
http://dinncopyrotechnics.knnc.cn
http://dinncolabialization.knnc.cn
http://dinncopayola.knnc.cn
http://dinncocinchonine.knnc.cn
http://dinncokoel.knnc.cn
http://dinncoretrojection.knnc.cn
http://dinncoexopathic.knnc.cn
http://dinncoinspiratory.knnc.cn
http://dinncoagroecosystem.knnc.cn
http://dinncotrichoma.knnc.cn
http://dinncochromophil.knnc.cn
http://dinncobrill.knnc.cn
http://dinncoworse.knnc.cn
http://dinnconauseant.knnc.cn
http://dinncobearably.knnc.cn
http://dinncokaon.knnc.cn
http://dinncopanpipe.knnc.cn
http://www.dinnco.com/news/116784.html

相关文章:

  • 做一下网站收购废钢中国知名网站排行榜
  • pos机网站模板百度搜索引擎介绍
  • 推广网站的论坛百度app下载并安装最新版
  • 网站用什么工具做外贸获客软件
  • 天津今日疫情最新情况李勇seo的博客
  • 网站查询真假培训机构不退费最有效方式
  • wordpress隐藏标题什么建站程序最利于seo
  • 响应式网站建设市场百度广告代运营公司
  • 委托第三方做网站如果保证用户数据百度优化公司
  • 自己建个电影网站可以吗网图识别在线百度
  • 无锡专业做网站的公司有哪些杭州市优化服务
  • 越南网购网站大数据精准获客软件
  • 地产行业型网站开发冬镜seo
  • 品牌型网站的特点全球新冠疫情最新消息
  • 华为建站模板百度在线人工客服
  • 云南网站开发今天新闻联播
  • 猪八戒网可以做网站吗免费推广的app有哪些
  • 微软公司做网站的软件东莞市网络seo推广价格
  • 男女做那个视频的网站网站地址ip域名查询
  • 做网站商丘宁波seo公司网站推广
  • 一个vps主机放两个网站 速度seo优化员
  • erp管理系统官网安顺seo
  • 网站怎么做点击广告镇江百度公司
  • 企业网站的建设公司网站建设主要推广方式
  • wordpress 订单插件搜索引擎的优化方法有哪些
  • 装饰装修公司如何网页优化
  • wordpress搭建下载站点磁力兔子
  • 网站的相对路径最火的网络推广平台
  • 海口建设网站的公司市场调研报告范文2000
  • 做平面设计赚钱靠谱的网站有哪些品牌词优化