tv端h5_H5在三端开发遇到的问题(TV/PC/MOBILE)-程序员宅基地

技术标签: tv端h5  

项目简介

公司最近开发会员体系项目,前端利用H5技术嵌入三端开发页面,TV端原生技术是C++,PC端原生技术是JAVA。

传值问题

Javascript与安卓/IOS进行交互。原生把方法暴露给window。前端只需要下window对象调用方法,进行传值即可。

notice:function(token,uuid){

var pattern = new RegExp('iPhone|iPad', 'ig');

var str = pattern.test(navigator.userAgent);

var data = {

"type":"2",

"session":token+"",

"uuid":uuid+""

}

if (str) {

try{

window.webkit.messageHandlers.onAction.postMessage(JSON.stringify(data));//调用ios上的方法

}catch(e){}

} else {

try{

JavaScriptHandler.onAction(JSON.stringify(data));//调用androd上的方法

}catch(e){}

};

}

Javascript与c++进行交互。原生把方法暴露给window。前端只需要下window对象调用方法,进行传值即可。

notice: function(data) {

try {

window.external.SayString(data);

} catch(e) {};

}

兼容问题(大型公司一般都会有自己的浏览器,有的话请忽略)

TV和PC只兼容到IE9,低于IE9采取提示的方式,提示用户升级浏览器。IE9也会产生一些问题。如下:

(1)跨域问题,core(后端添加允许跨域头)跨域不支持IE9模式,jquery添加xdomainrequest模块兼容。

(2)首先搞清楚ajax两个属性的意思,dataType把返回的数据转化成对应的类型,contentType把传递的数据转化成对应的类型,后端会接收到对应的类型。xdomainrequest模块会串改contentType:'application/json'类型。换成其他方式解决跨域/后端改接收模式

(3)webpack不支持IE9,判断不支持webpack模式的进行轮询。

模拟弹出框问题

同一个页面,在H5上弹出对应的页面,在C++也需要弹出对应的页面。新建一个页面,H5使用layer弹出框嵌入页面的形式模拟弹出框。

function renewClick(){

layer.open({

move: false,

type: 2,

title: common.title("自动续费管理"),//自定义标题

maxmin: true,

shade: 0,

area: ['35rem', '25rem'], //'50rem', '35rem'最大尺寸

scrollbar: true,

content: ['renewManage.html'+'?random='+Math.random()],//renewManage

end: function(){

common.buryPoint(homeUrl,814,632);

}

});

}

父子页面通信

子页面调用父页面的方法传值window.parent.traffic(1),父页面定义方法接收

function traffic(){

layer.closeAll(); //关闭所有弹出框

layer.open({

move: false,

type: 2,

title: common.title("扫码支付"),

maxmin: true,

shade: 0,

scrollbar: true,

area: ['25rem', '22rem'], //'50rem', '35rem'最大尺寸

content: ['wxpay.html'],

})

}

https链接的兼容问题

服务器上所有的接口和图片http=>https(websock通信协议ws=>wss),不然会产生跨域问题,获取不到数据。

addHttps:function(source){

if(window.location.protocol=="https:"){

source = source.replace("http","https");

};

console.log("source123",source);

return source;

}

URL链接参数带中文字符的问题

encodeURI("中文字符")转码:%E4%B8%AD%E6%96%87%E5%AD%97%E7%AC%A6

decodeURI("%E4%B8%AD%E6%96%87%E5%AD%97%E7%AC%A6")解码:中文字符

URL地址遇到中文字符,就会进行encodeURI转码

interceptUrl: () => {

var url = window.location.search; //获取url中"?"符后的字串,包括"?"

var theRequest = new Object();

if (url.indexOf("?") != -1) {

var str = url.substr(1);

var strs = str.split("&");

for (var i = 0; i < strs.length; i++) {

theRequest[strs[i].split("=")[0]] = decodeURI(strs[i].split("=")[1]);

}

}

return theRequest;

}

移动端单页面应用的刷新问题

(1)不能使用状态管理模式来储存数据,可使用链接后面带参数的形式传值,也可以使用localstorage进行本地存储,注意:取到数据即使清除localstorage。

(2)路由的两种方式(history和hash),默认是history=>hash,history路由的方式https://www.jianshu.com/writer/zhu,服务器匹配不到/zhu报错404。hash路由https://www.jianshu.com/writer#zhu,服务器指向的总是根域名。切记存在刷新功能,使用hash进行路由。

微信支付不成功的问题

H5微信支付是在通过公众号配置回调地址,是根据referer地址进行操作。默认情况下referer指向本当前路径。禁止referer导致公众号未能匹配到当前路径,报错。存在第三方需要配置回调地址的时候,切记不要进行如下配置;

(1)如果页面中包含了如下 meta 标签,所有从当前页面中发起的请求将不会携带

(2)如果页面中包含了如下 meta 标签,则从当前页面中发起的 http请求将只携带 origin 部分(注:根据原文中的语境,我理解这里的 origin 是包含了 schema 和 hostname 的部分 url,不包含 path 等后面的其他 url 部分),而不是完整的 URL

image.png

历史纪录的问题

需求分析,扫码登陆后,回退直接到主界面,登陆扫码页面不产生历史纪录。

window.location.replace("myccount.html?login=1"); //跳转链接时,不记录

客户端默认IE7打开网页

添加头部信息,默认指定高版本浏览器打开。

edge浏览器localstorage.setItem()报错,超出存储范围

兼容方法,通过链接后面拼接参数的形式传递参数,getItem未取到值,就去取链接后面的参数。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39916479/article/details/111793911

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签