apicloud中打开外部链接通常用以下两种方式:
webBrowser:更完美的呈现H5页面
openWin:利于H5与APP进行交互
本文主要接口webBrowser如何从链接中获取传参,并打开APP中的对应页面。
//url设置方法 // var appwinname = 'group_vip_win'; // var appwinurl = 'widget://html/group_vip_win.html'; // appwinurl = encodeURIComponent(appwinurl); // $(window).attr('location','https://iskeys.com?appfunction=orther&appwinname='+appwinname+'&appwinurl='+appwinurl+'&appPageParam_uid='+encodeURIComponent(uid)+'&appPageParam_nickname='+encodeURIComponent(nickname)); function openUrl(url){ var headerPos = $api.offset($api.byId('header')); //获取头部定位,此处自行更改,不需要可以替换 //引入webBrowser模块,记住在控制平台中先加入模块,重新打包loader var browser = api.require('webBrowser'); //这边使用openView便于自定义浏览器窗口布局,低需求的可以直接用集成好的open方法 browser.openView({ url: url, //待访问路径 scaleEnabled: 'false', //是否可以缩放 true/false rect: { x: 0, y: headerPos.h, //Y轴定位,根据自己需求更改 w: 'auto', h: api.winHeight - headerPos.h //高度计算,根据自己需求更改 } }, function(ret, err) { //state加载状态,数字类型,取值范围:0-开始加载;1-加载进度发生变化;2-结束加载;3-title发生变化;4-url发生变化 //对来源url分析是否需要调取APP内部页面 if(ret.url){ /********************************接下来开始分析URL是否需要唤起APP内部页面**************************************/ ret.url = encodeURIComponent(ret.url); //自定义用法(通过传递winname/url/参数以自定义打开对应页面) //当appfunction 为 orther 时启用该解析方式 var urlWinName = funcUrlGet(ret.url,'appwinname'); var urlWinUrl = funcUrlGet(ret.url,'appwinurl'); var urlPageParam = funcPageParamGet(ret.url); //常规用法案例:$(window).attr('location','https://www.w3cschool.cn/api/appapi/testApi?appfunction=project&appvalue=56875'); if(!urlValue){ urlValue = ''; }else{ urlValue = decodeURIComponent(urlValue);//进行解码 } if(urlWinName){ if(urlWinName && urlWinUrl){ urlWinUrl = decodeURIComponent(urlWinUrl);//进行解码 api.openWin({ name: urlWinName, url: urlWinUrl, pageParam: urlPageParams }); //同时将路径中的参数移除,避免重复弹出 ret.url = funcUrlDel(ret.url,'appwinname'); ret.url = funcUrlDel(ret.url,'appwinurl'); } //设置路径回跳,避免重复打开 isRefresh = 1; } } switch (ret.state) { case 0: break; case 1: break; case 2: //加载结束 if(url != ret.url){ //显示关闭按钮 $("#closeWin").show(); } if(isRefresh == 1){ isRefresh = 0; browser.historyBack( function(ret, err) { if (!ret.status) { } } ); } break; case 3: $("#title").text(ret.title); title = ret.title; break; case 4: break; default: break; } }); } // 获取url中某个get参数 function funcUrlGet(url,variable){ var query = url.split("?"); if(typeof query[1] == 'undefined'){ return(false); } var vars = query[1].split("&"); for (var i=0;i<vars.length;i++) { var pair = vars[i].split("="); if(pair[0] == variable){return pair[1];} } return(false); } // 获取url中的APP openWin所需的参数 //pageParam参数默认自带前缀: appPageParam_******* = **** function funcPageParamGet(url){ var query = url.split("?"); if(typeof query[1] == 'undefined'){ return(false); } var vars = query[1].split("&"); var param = new Object; for (var i=0;i<vars.length;i++) { vars[i] = decodeURIComponent(vars[i]);//进行解码 if(vars[i].indexOf("appPageParam_") != -1){ vars[i] = vars[i].replace(/appPageParam_/g,''); var pair = vars[i].split("="); param[pair[0]] = pair[1]; } } if(param.length > 0){ return param; } return(false); } // 删除url中某个get参数 function funcUrlDel(url,name){ var loca = url.split("?"); var baseUrl = loca[0]; if (loca[1].indexOf(name)>-1) { var obj = {} var arr = loca[1].split("&"); for (var i = 0; i < arr.length; i++) { arr[i] = arr[i].split("="); obj[arr[i][0]] = arr[i][1]; }; delete obj[name]; var url = baseUrl + '?' + JSON.stringify(obj).replace(/[\"\{\}]/g,"").replace(/\:/g,"=").replace(/\,/g,"&"); return url }; }
本文为翻滚的胖子原创文章,转载无需和我联系,但请注明来自猿教程iskeys.com