自己写了一个angularjs + ionic项目,在广告中有一个查看商品详情,复制商品详情链接之后,页面没有跳转到指定页面,而是跳转到ionic项目的首页。
测试过程:
1、在没有打包压缩js 和 html(缓存)之前,可以链接到指定页面,但是打包压缩之后,地址栏会迅速的切换为angularjs默认的首页路由地址。
2、打包压缩的工程,进入首页之后,又能够正常的路由。
部分代码如下,代码如图
1、没有压缩的代码
2、压缩之后
过程分析
第一次使用HTML模板,它被加载到模板缓存中,以便快速检索。你可以直接将模板标签加载到缓存中,或者通过$templateCache服务。
也就是说,第一次通过href链接进入ionic项目,没有第一次使用HTML,即实际上$templateCache还没有真正缓存数据,找不到数据,那么执行默认的路由,进入首页的html页面,(这是才是第一次使用HTML模板),当再次点击指定连接的时候,就执行正常了。
解决办法:
压缩的js文件去掉$templateCache缓存即可。
下面是自己写了一个规避办法
String.prototype.startWith=function(str){ if(str==null||str==""||this.length==0||str.length>this.length) return false; if(this.substr(0,str.length)==str) return true; else return false; return true; } //解决直接访问angular深度链接不成功的问题 var historyBefortUrl = "";//链接进来的Url,可能为空 var targetJumptoUrl = "";//想跳转的页面 function firstDeepJumpto(){ window.location.href = targetJumptoUrl; } //定义配置信息 app.config(function ($stateProvider, $ionicConfigProvider) { //禁用所有缓存 $ionicConfigProvider.views.maxCache(0); //解决深度链接跳转不成功的问题 console.log(window.location.href); console.log(document.referrer); historyBefortUrl = document.referrer; targetJumptoUrl = window.location.href; //链接进来的URL与当前angular app域名不一致 并且 不是angular app 首页的链接 if(!historyBefortUrl.startWith('http://www.sqhzg.cn/index.php/Wap/Homemake/indexHomeAngular.html') && (targetJumptoUrl !="http://www.sqhzg.cn/index.php/Wap/Homemake/indexHomeAngular.html#/appliance/index" && targetJumptoUrl !="http://www.sqhzg.cn/index.php/Wap/Homemake/indexHomeAngular.html")){ setTimeout(firstDeepJumpto,200); } });