• 注册
  • 发动态
  • 发帖子
  • 发视频
  • 发红包
  • 暂没有数据

  • 推荐
  • 视频
  • 关注
  • 瓷器
  • 字画
  • 玉石
  • 钱币
  • 铜器
  • 木器
  • 紫砂
  • 杂项
  • [ls_fbk]
  • 查看全文
  • 查看作者
  • 宫论项目开发记录

    记录2023年项目进度周期。

  • 2
  • 733
  • 0
  • 21.4w
  • 小小乐小可鸭鸭

    请登录之后再进行评论

    登录
  • 0
    小小乐lv.2实名用户
    2025年9月1日
    1、宫论APP正式集成FingerprintJS浏览器指纹采集,当start.js脚本触发的时候,会加载 FingerprintJS 通过 FingerprintJS.load() 异步加载指纹识别库。这个方法会返回一个 Promise。 获取指纹对象 当库加载完成后,会得到一个指纹对象(fp)。接着,调用 fp.get() 方法,这也是一个异步操作,会继续返回一个 Promise。 得到指纹结果 fp.get() 执行完成后,会返回一个结果对象,其中包含 visitorId,这是根据当前设备和浏览器生成的唯一指纹标识。 存储指纹标识 首先,将 visitorId 赋值给变量 fingerprint。 然后,调用 set_cookie('fingerprint', visitorId),把这个指纹标识存到浏览器的 Cookie 中,方便后端或者其它前端脚本使用。 设置全局不可修改的属性 最后,使用 Object.defineProperty 在 window 对象上定义一个 fingerprint 属性,值为刚才获取到的 visitorId。并且设置为不可修改、不可删除,这样后续任何代码都无法更改这个值,确保指纹标识的唯一性和安全性。
    2、当启动APP成功生成获取到浏览器指纹后,会触发API接口请求,请求后端进行业务响应处理。指纹是通过浏览器的特性来生成的,因此只能通过前端进行处理。然后在通过后端进行业务逻辑的解析处理动作。指纹事件也是宫论APP唯一初始化后,和后端交互的动作,一些参数的交换也是通过指纹事件来完成的。
    3、在后端接收到指纹请求后,系统会通过POST方法提取指纹信息,并结合IP地址、用户代理(ua)以及指纹数据生成一个加密的token令牌。这个令牌有效期为24小时,并将对应的指纹信息写入其中。该token令牌是本次用户会话的安全凭证,后续涉及敏感操作的交互行为将依赖此令牌进行身份验证和安全保障。生成token时,采用MD5加密参数,以确保字符串长度适中,便于处理和传输。
    4、为了确保业务逻辑的一致性和简化开发流程,后端在获取用户设备环境时,采用了一种统一的封装方法来进行读取。这种方法通过一系列精确的判断来识别用户所在的操作环境。具体操作包括:通过xinle_is_app判断用户是否处于APP环境;使用xinle_is_weixin来判断用户是否使用微信环境,这包括微信浏览器和微信小程序;通过xinle_is_miniprogram识别用户是否在小程序中;利用xinle_is_h5判断是否处于H5环境;通过xinle_is_ios和xinle_is_android来分别识别用户设备是否为iOS或安卓系统;使用xinle_is_pc判断用户是否在PC端环境;最后,通过xinle_is_wechat来确认用户是否使用微信浏览器。这些封装方法的运用,使得后端能够更高效地进行环境识别。
    5、除了验证设备环境的相关信息外,系统还专门封装了两个方法,用于便捷地获取设备的具体信息:其一是 xinle_is_ip 方法,该方法用于获取当前客户端的IP地址。由于实际场景中客户端的IP地址可能是IPv4、IPv6,或者经过代理服务器的代理IP,因此需要通过该方法进行统一解析和处理,以确保准确获取和识别。其二是 xinle_is_ua 方法,该方法主要用于获取当前客户端的UA(User Agent)信息。通过解析HTTP请求头中的 HTTP_USER_AGENT 字段,可以提取并返回客户端设备的详细UA信息。
    6、新增一个方法xinle_is_device,检测用户设备的类型并返回对应的设备描述。执行流程:判断是否为应用(App) 首先调用 xinle_is_app() 判断当前环境是否为 App(移动应用)。 如果是 App: 再判断是不是 iOS 设备(xinle_is_ios()),如果是则返回 'iPhone APP'。 否则判断是不是安卓设备(xinle_is_android()),如果是则返回 'Android APP'。 判断是否为微信环境 如果不是 App,继续判断是否为微信环境(xinle_is_weixin())。 如果是微信: 再判断是不是微信小程序(xinle_is_miniprogram()),如果是则返回 '微信小程序'。 否则返回 '微信浏览器'。 判断是否为 H5 移动端 如果不是微信环境,继续判断是否为 H5(移动网页,xinle_is_h5())。 如果是 H5: 判断是不是 iOS 设备(xinle_is_ios()),如果是则返回 'iPhone 移动端'。 否则判断是不是安卓设备(xinle_is_android()),如果是则返回 'Android 移动端'。 如果都不是,返回 'H5 浏览器'。 判断是否为 PC 端 如果不是 H5,继续判断是否为 PC 端(xinle_is_pc())。 如果是,则返回 'PC 电脑端'。 默认返回值 如果以上所有判断都不成立,则返回 '未知设备',作为兜底。
    7、新增xinle_is_security方法,用户验证用户的设备的安全性:基础检查 首先获取当前登录用户ID(xinle_is_login())。 如果用户未登录,或指纹信息(xinle_is_fingerprint())为空或无效,则直接返回 false,表示安全验证不通过。 获取安全信息 通过用户ID,从数据库(xinle_query_sql('xinle_security', $user_id))查询该用户的安全信息。 如果查询不到安全信息,返回 false。 优先检查IP匹配 如果数据库中的安全信息IP($security['ip'])和当前访问IP(xinle_is_ip())完全一致,则直接通过验证,返回 true。 设备类型特定检查 获取当前指纹信息(xinle_is_fingerprint())。 根据不同的设备类型进行对应的指纹比对: App环境 如果是 App,先检查 Cookie 中是否有 uuid 字段,且数据库中的 uuid 是否与其一致。如果不一致,直接返回 false。 如果一致,再比对数据库中的 app_fingerprint 和当前指纹是否一致,返回比对结果。 微信环境 如果是微信,直接比对数据库中的 wx_fingerprint 和当前指纹是否一致,返回比对结果。 H5移动端环境 如果是 H5,直接比对数据库中的 h5_fingerprint 和当前指纹是否一致,返回比对结果。 PC环境 如果是 PC,直接比对数据库中的 pc_fingerprint 和当前指纹是否一致,返回比对结果。 未知设备类型 如果设备类型无法识别,或者以上所有情况都不满足,则返回 false,表示安全验证失败。
    8、后端在处理指纹事件的时候,把当前用户的各种环境信息、设备信息、安全状态等,统一赋值到 $user 数组中。$user['is_security'] 是否通过指纹安全校验(调用 xinle_is_security(),返回布尔值)。 $user['is_app'] 当前是否为 APP 环境(调用 xinle_is_app(),返回布尔值)。 $user['is_h5'] 当前是否为 H5(移动端网页)环境(调用 xinle_is_h5(),返回布尔值)。 $user['is_weiixn'] 当前是否为微信环境(包括微信浏览器和微信小程序,调用 xinle_is_weixin(),返回布尔值)。 注意拼写应为 is_weixin。 $user['is_ios'] 当前是否为 iOS 环境(调用 xinle_is_ios(),返回布尔值,通常包含 iOS APP 和 iOS H5)。 $user['is_android'] 当前是否为安卓环境(调用 xinle_is_android(),返回布尔值,通常包含安卓APP和安卓H5)。 $user['is_pc'] 当前是否为PC端环境(调用 xinle_is_pc(),返回布尔值)。 $user['is_miniprogram'] 当前是否为微信小程序环境(调用 xinle_is_miniprogram(),返回布尔值)。 $user['ip'] 当前客户端IP地址(调用 xinle_is_ip(),返回字符串)。 $user['ua'] 当前客户端的 User-Agent 信息(调用 xinle_is_ua(),返回字符串)。 $user['device'] 当前设备的类型描述(调用 xinle_is_device(),返回字符串,如“iPhone”、“Android”、“PC”等)。 $user['fingerprint_time'] 指纹采集的时间戳(当前服务器时间,格式为“Y-m-d H:i:s”)。
    9、为了提高获取用户资料信息的效率,优化系统性能,减少SQL请求量,新增了一个名为 xinle_is_profile 的方法,用于一次性获取用户的完整资料。该方法需要传递一个固定参数【user_id:指定用户的UID】,如果该参数为空,则方法会直接返回 false,避免无效的处理逻辑。当 user_id 不为空时,方法会初始化一个 profile 数组,并通过一系列内置方法逐步填充用户的详细信息,包括但不限于以下内容:用户ID(user_id)、昵称(nickname)、头像URL(avatar_url)、头像HTML代码(avatar_html)、是否为管理员(is_admin)、是否绑定手机号(is_user_phone)、是否绑定邮箱(is_user_email)、是否绑定微信(is_user_weixin)、用户是否已注册(is_user_registered)、用户是否已登录(is_user_login)、是否通过认证(is_verify)、认证HTML代码(verify_html)、是否获取手机号权限(is_get_phone)、是否获取邮箱权限(is_get_email)等。通过这种方式,能够在单次调用中获取用户的完整信息,减少频繁的SQL查询操作,提升数据获取的整体效率,同时为后续的业务逻辑处理提供更加便捷的支持。
    10、在xinle_is_profile方法中,新增了Redis缓存功能,以提升系统性能。具体实现过程中,首先构建了一个键名【user_profile:' . user_id】,用于标识每个用户的缓存数据。接着,检查uncache参数的状态:如果为true,则禁用缓存功能,直接获取最新的用户资料。如果uncache为false,会调用get_redis_meta方法来检查缓存是否已经存在。如果缓存数据存在,则直接返回缓存结果,避免不必要的重复计算;如果缓存数据不存在,将通过内置方法获取用户资料,并将其结果缓存到Redis中,设置缓存有效期为30天。为了便于区分缓存的数据,每次写入Redis时,会在数据数组中添加一个名为cache的字段,其值为当前的时间日期,这样可以清楚地知道缓存的生成时间。通过这种方式,有效地提高了用户资料的获取效率,同时也为后续的缓存管理提供了便利。
    11、xinle_is_profile 方法默认设置了30天的缓存时间,其缓存的刷新机制是通过 xinle_update_user_meta_hook 钩子来实现的。当用户的以下元字段发生变动时(包括 phone、avatar_url、weixin_uid、email、verify、admin),系统会触发对应的 HOOK 钩子,随后调用 delete_redis_meta 方法来移除与用户相关的 user_profile 缓存数据。这样一来,用户的缓存资料便会被同步清除,确保数据的实时性和准确性。在缓存被移除后,下一次的请求将直接通过 wpdb 数据库查询最新数据,而不是读取此前已缓存的内容
  • 0
    小小乐lv.2实名用户
    2025年8月29日
    1、移动端首页新增自定义meta字段选项:width=device-width:页面宽度与设备屏幕宽度相同,保证自适应。 initial-scale=1:初始缩放比例为1(即页面初始加载时不缩放)。 maximum-scale=1:用户可缩放的最大比例为1(即不能放大)。 minimum-scale=1:用户可缩放的最小比例为1(即不能缩小)。 user-scalable=no:禁止用户缩放页面(双指缩放等无效)。 viewport-fit=cover:针对 iPhone X 及以上带“刘海屏”的设备,页面内容会延伸至屏幕的安全区域,适配全屏显示。viewport-fit:有 auto(默认)、contain(内容不会被安全区遮挡)、cover(内容延伸到整个屏幕)。允许网页以“Web App”模式(即全屏模式)运行,隐藏 Safari 浏览器的工具栏和地址栏。
    2、为了确保移动端的配色一致性,会通过: root进行如下参数的后台接管配置:--xinle_color 主题主色,用于整个网站的主要颜色。 获取方式:xinle_get_option('xinle_mobile_defalut_color') --xinle-navbar-bg 导航栏背景色。 获取方式与主色一致。 --xinle-navbar-text-color 导航栏文字颜色。 获取方式:xinle_get_option('xinle_mobile_defalut_color_text') --f7-tabbar-link-active-color 底部 TabBar 激活时的链接颜色(活跃状态)。 获取方式与主色一致。 --f7-navbar-link-color 导航栏链接文字颜色。 获取方式与导航栏文字颜色一致。 --f7-navbar-font-size 导航栏字体大小,单位为 vw(相对于视口宽度)。 --f7-bars-text-color 所有 bars(导航栏、工具栏等)上的文字颜色。 获取方式与导航栏文字颜色一致。 --f7-toolbar-height 底部菜单栏高度,固定为 49px。 --f7-page-bg-color 页面背景颜色。 获取方式:xinle_get_option('xinle_mobile_defalut_page_bg_color’)。
    3、APP初始化首页的时候,会通过后台获取如下配置:获取当前登录用户的ID,并赋值给 $user_id。 $current_user 通常是通过 wp_get_current_user() 得到的用户对象。通过自定义函数 xinle_get_option 获取 WordPress 后台的“移动端Tab栏配置”选项,赋值给 $tab_config。 这个配置一般是控制移动端底部导航栏(TabBar)的内容和结构。通过 xinle_get_option 获取“页面配置”选项(一般为数组或对象),然后用 json_encode 转换为 JSON 字符串,赋值给 $routesJson。 这个 JSON 数据会传递给前端 JavaScript,用于动态渲染页面或路由。调用自定义函数 xinle_is_chat_list() 获取聊天会话消息列表。通常返回当前用户的聊天会话数据。
    4、APP端的视图窗口现已通过配置项 xinle_mobile_tab_config 进行读取和动态生成,该配置项能够灵活定义视图的相关属性并对其行为进行控制。目前支持的参数包括以下几项:key 用于标识视图的唯一性,以确保不同视图之间的区分;is_login 用于设置视图的访问权限,若该参数为真,则该视图仅对登录用户开放,并会强制要求用户完成登录操作;icon 指定视图的菜单图标,支持自定义图标样式以增强视觉效果;name 为视图的名称,用于显示在菜单或其他位置,帮助用户快速识别视图功能;active 定义视图的类名,主要用于调整样式或交互效果。
    5、视图主容器的处理,读取$tab_config(移动端底部Tab栏的配置数组),每次循环处理一个Tab页面。获取每个Tab的 key 和 page_name。 通过 xinle_is_config 获取该Tab的详细配置。 根据配置的布尔值,生成对应的class类名字符串(如隐藏导航栏、顶部下拉刷新、无限加载、需要登录等)。 只有第一个Tab设置为激活状态(tab-active)。 如果配置了隐藏头部,则加上 hide 类。输出每个Tab的最外层 div,ID为Tab的key,class为 view tab,如果是第一个Tab还会带 tab-active。 里面有页面容器、顶部导航栏。 导航栏左侧、右侧、标题都可以通过后台配置自定义内容(支持WordPress的shortcode)。页面内容区的class会根据配置动态组合,比如支持下拉刷新(ptr-content)、无限加载(infinite-scroll-content)、需要登录(is_login)等。
    6、主视图功能进一步优化,现已支持通过后台灵活设置更多参数,以满足不同场景的需求。具体来说,若当前Tab页配置了顶部下拉刷新功能,则会自动输出下拉刷新动画的HTML结构,提供更直观的交互体验;如果后台已指定该Tab页的具体页面文件地址(例如 /wp-content/themes/你的主题/xxx.php),系统将自动require该文件内容,完成页面内容的集成展示,确保模块加载的便捷性与一致性。而对于未配置具体页面地址的情况,则会智能显示一个加载动画以及提示信息,例如“后台未设定模块地址”,并附带一个跳转链接,方便用户快速定位到后台设置页面进行配置调整。最后,系统会自动关闭HTML标签,并自增变量,顺畅进入下一个Tab页的循环处理,确保每个模块都能按照设定逻辑高效加载与呈现。
    7、当前,APP页面的所有组件均通过后台进行配置管理。在首页初始化时,系统会通过读取xinle_page_config来生成相应的页面。在后台配置页面时,需要设置以下参数:首先是route['key'],即页面组件的唯一标识符;其次是route['componentUrl'],这是页面的读取路径,必须经过标准化的Framework7构建才能被识别。此外,还有route['admin'],此参数用于限定页面访问权限,仅允许管理员访问;最后是route['login'],该参数确保页面仅在用户登录后才能访问。为了确保页面能够正确构建并响应,所有页面组件都必须在后台进行适当配置,否则前端将无法正常访问。
    8、动态生成 Framework7 路由配置的处理逻辑如下:首选通过DOMContentLoaded确保所有 DOM 元素加载完成后再执行代码,避免未加载导致的报错。变量定义visitedPages:用于记录已访问页面(目前没用到,可用于后续功能如页面缓存等)。 app_path:存储移动端页面的基础路径,方便后续拼接组件路径。 routesData:从 PHP 传来的路由 JSON 数据,包含每个页面的配置(如 key、componentUrl、login、admin 等)。遍历每个路由配置,生成 Framework7 的路由对象数组。 path:每个页面的访问路径。 componentUrl:组件页面的实际路径。 beforeEnter:路由进入前的钩子函数,用于权限校验。
    9、Framework7路由配置现在支持权限检测处理,系统会通过beforeEnter来检测当前页面组件访问权限:如果当前路由需要登录(login==true),且用户没登录(!xinle.is_login),则: 调用登录函数 xinle_login()。 阻止跳转,reject()如果页面需要管理员权限,且未登录,先强制登录。如果已登录但不是管理员,则弹窗提示无权访问,并阻止跳转。所有权限校验通过后,允许页面跳转。注:对每个页面实现登录和管理员权限控制,无权限时自动拦截跳转,并弹窗或跳转登录。支持后续扩展页面缓存、跳转方向等功能。
    10、APP端的初始化工作:1. 绑定应用根节点 el: '#app' Framework7 会把页面的主要内容绑定到这个元素( <div id="app"></div>)。 2. 基础配置 name: '奇峰药业' 应用名称。 theme: 'ios' 使用 iOS 风格主题。 infiniteScroll: true 启用无限滚动。 panel: { swipe: true } 允许侧边栏通过滑动打开。 view: { pushState: true, iosSwipeBack: true } pushState: true 启用浏览器历史记录(地址栏变化)。 iosSwipeBack: true 启用 iOS 风格的左滑返回上一页。 3. 路由配置 routes: [ ... ] 路由规则数组,决定页面跳转和内容加载的方式。 3.1. 动态路由(...routes) 由你之前的代码动态生成,每个路由都包含权限校验(登录、管理员)、页面路径和组件路径。 跳转到这些页面时,都会先执行 beforeEnter 权限验证。
    11、在应用实例初始化阶段,当用户通过点击链接或导航菜单跳转页面时,Framework7将按照以下流程进行处理:首先,根据用户跳转的路径匹配对应的路由配置,并执行beforeEnter权限校验(如果设置了相关逻辑),判断用户是否需要登录或具备管理员权限等条件。若权限不满足,系统将弹窗提示或跳转至登录页面,以阻止当前页面跳转操作。权限通过后,系统会加载对应的页面组件。对于未匹配的路径,系统会通过通配符路由进行处理,展示404页面或加载指定的外部页面。此外启用了pushState功能,浏览器地址栏会随着页面跳转动态更新。
  • 0
    小小乐lv.2实名用户
    2025年8月28日
    1、移动端目前实现了对浏览器返回事件(popstate)的监听,利用history.back()、history.pushState()等API对历史记录进行操作时,会触发popstate事件,从而执行绑定的回调函数,最终调用xinle_page_back()方法以完成页面返回的逻辑处理。而在APP环境下(通过检测userAgent中是否包含Html5Plus判断),不会绑定页面上的.back按钮事件,而是通过APP的原生返回事件进行处理,确保在不同环境下都能实现稳定的返回功能。
    2、xinle_page_back负责页面路由后退返回机制,具体的执行流程如下:检查页面上是否存在 layui 的遮罩层(即 .layui-m-layershade)。 如果存在遮罩层,优先关闭所有 layer 弹窗(layer.closeAll()),并终止后续返回操作(return false;)。 这样可以防止用户误操作导致弹窗未关闭直接跳转页面。 首页特殊处理: 如果当前用户处于首页(user.is_home 为 true),可以在这里做特殊处理(如弹窗提示或日志记录)。 获取当前视图对象: 获取框架下当前的视图实例(app.views.current),通常用于 SPA 或前端路由管理框架。 判断参数并返回页面: 如果传入了 url 参数,则直接返回到指定页面,并强制刷新(force: true)。 如果没有传入 url,则默认返回到上一个页面。
    3、安卓返回键处理(plusready 事件) 1. 监听 APP 环境准备就绪 通过 document.addEventListener('plusready', ...),确保代码只在 APP(Html5Plus)环境下运行。 2. 获取当前 Webview 使用 plus.webview.currentWebview() 获取当前页面的 Webview 实例,后续返回操作都基于此 Webview。 3. 监听安卓物理返回键 plus.key.addEventListener('backbutton', ...) 监听安卓设备的物理返回键事件。 4. 判断 Webview 是否可以后退 webview.canBack(function(e){...}) 判断当前 Webview 是否有历史记录可返回。 5. 处理流程如下: a. 如果当前在首页(user.is_home) 直接调用 main.moveTaskToBack(false),把 APP 退到后台(返回桌面),而不是直接退出 APP。 b. 如果有弹窗 检查是否有 .modal-overlay-visible 或 .login-screen.modal-in 元素(即页面有弹窗)。 如果有,优先关闭所有弹窗(myApp.closeModal()),并移除 .popup-overlay 的某些 class(此处建议补全 class 名称)。 c. 如果有 Fancybox 弹窗 检查 .fancybox-is-open,如果有,关闭 Fancybox 弹窗($.fancybox.close())。 d. 否则正常页面后退 如果 Webview 可以后退(e.canBack),执行 webview.back() 返回上一页。 如果不能后退(已到最顶层页面),同样调用 main.moveTaskToBack(false),让 APP 退到后台。
    4、移动端目前在页面初始化时,会执行一系列页面路由监听操作,以确保用户操作和页面状态的实时响应。这些监听事件包括以下几种:pageInit(页面初始化),用于加载页面初始内容及相关逻辑;routeBack(页面行为:后退),当用户执行页面后退操作时触发;routeChange(页面行为:前进),响应用户的页面前进操作;pageBeforeIn(页面即将进入),在页面正式进入前预先处理相关逻辑;pageAfterIn(页面已进入),用于处理页面进入后的状态更新;pageBeforeOut(页面即将离开),在页面离开前执行清理或保存操作;pageAfterOut(页面已离开),确保页面离开后的后续逻辑处理;pageBeforeRemove(页面即将被移除),用于监听页面被移除前的最后处理环节。这些事件的组合使用能够有效提升页面切换的流畅性和用户体验,同时为开发者提供灵活的页面状态管理能力。
    5、移动端在触发(pageBeforeIn:页面即将进入时)会触发以下处理:判断当前页面是不是首页或主Tab页面(通过判断页面名称是在一个预设的数组里)。 如果是首页或Tab页面: 会把浏览器地址栏的路径重置为根路径 /,但不会刷新页面,这样可以避免路由混乱; 同时把一个全局变量(比如 user.is_home)设置为 true,表示当前用户正处于首页; 然后调用一个初始化首页的函数,把首页内容重新渲染出来,确保首页功能正常。 如果不是首页或Tab页面: 只把那个全局变量设置为 false,标记当前页面不是首页。
    6、移动端路由监听:当页面完成切换并“进入”后,会自动触发 pageAfterIn 事件。 2. 获取并保存当前页面内容区域 代码通过 $('.page-content.' + page.name + '_content') 获取当前页面的内容区域,并赋值给全局变量 user.page_content,方便后续操作或渲染。 3. 打印调试信息 在控制台输出:“页面已进入:” 以及页面的名称和路由地址,方便开发时定位和调试当前页面状态。 4. 记录页面历史路由 通过 page.route.url 获取当前页面的路由地址(URL)。 判断该 URL 是否已经存在于 page_history 数组中: 如果不存在,则将当前页面的 URL 添加到 page_history,用于记录用户访问过的页面,方便后续做页面回退、历史导航等操作。
    7、移动端路由监听:当页面即将被销毁、移除(比如返回、跳转到其他页面等)时,自动触发 pageBeforeRemove 事件。 2. 控制台打印调试信息 在控制台输出:“页面即将被移除:” 以及当前页面的名称,方便开发过程中追踪页面的生命周期。 3. 从历史记录中移除当前页面的路由 获取当前页面的路由地址(page.route.url),赋值给变量 pageUrl。 在 page_history 数组中查找该 URL 的位置(indexOf)。 如果找到了(index !== -1),说明历史记录中有这个页面的路由: 通过 splice 方法把这个路由地址从 page_history 数组中删除,保持历史记录的正确性,避免重复和无效数据。
    8、当移动端首页的 DOM 加载完成后(即触发 jQuery 的 $(document).ready() 方法),开始执行预设的函数内容以确保页面功能的正常运行。首先,初始化聊天会话页面,通过调用 xinle_update_view_messages() 方法实现聊天列表的加载与消息内容的显示,同时支持页面的自动刷新,以便用户在进入页面时即可看到最新的聊天信息,优化交互体验。接着,处理 URL 哈希值以实现页面跳转逻辑。具体流程如下:通过 window.location.hash 获取当前窗口的哈希值(如 #chat),然后去掉哈希符号 #,提取实际路径(如 chat)。为了统一页面入口路径并简化后续的页面管理,使用 window.history.pushState(null, null, '/') 将浏览器地址栏的路径设置为根路径 /,这一操作不会触发页面刷新。最后,根据处理后的路径调用 xinle_page_open(path) 方法,加载对应的页面内容或模块。
    9、APP端新增页面路由访问事件 xinle_page_open,负责处理页面访问请求,确保页面切换逻辑高效且流畅。其执行流程如下:首先,函数会获取当前视图对象和路由管理器,这两个核心对象是后续页面操作的基础,确保所有页面操作都基于当前视图和路由进行。随后,函数会检查自定义的历史记录数组 page_history,判断目标页面是否已经打开过。如果发现该页面 URL 已存在于历史记录中,则直接调用 xinle_page_back(url) 返回到之前打开的页面,避免重复打开,并终止函数执行。接着,函数会进一步判断当前页面的 URL 是否与目标页面一致,如果当前页面就是用户要打开的页面,则仅输出一条警告信息,避免页面重复加载,提升性能。
    如果目标页面不在当前页面但已存在于路由的历史记录中,函数会采取三步处理措施:首先,删除页面残留的 DOM 元素,避免内容冲突或重复;其次,从路由历史记录中移除该页面,确保历史记录的准确性;最后,如果该页面是动态注册的路由,则尝试移除相关路由配置(若移除失败会输出警告信息)。在完成上述检查与清理后,函数将通过路由的导航方法 navigate 打开目标页面,并传递相关参数(如动画效果、回调函数等),以实现页面的顺利切换。
    10、APP端新增了一个用于刷新当前页面的路由处理方法(xinle_page_refresh),其执行流程设计如下:首先,通过 app.views.current 获取当前激活的视图对象(View),在 Framework7 框架下,通常只有一个主视图,这一步确保了操作的目标视图是当前正在使用的视图。接着,方法会判断是否传入了 url 参数:如果传入了 url,则将其作为需要刷新的目标页面地址;如果未传入 url,则会自动获取当前路由对象的 URL,将当前页面的地址作为默认刷新目标。随后,方法调用视图对象的路由器(View.router.navigate())来重新加载目标页面,并传递两个关键参数——reloadCurrent: true 和 ignoreCache: true。其中,reloadCurrent: true 强制重新加载当前页面,而非简单地跳转;ignoreCache: true 则确保忽略页面缓存,从服务器端重新获取页面内容,以保证页面内容的最新状态。刷新操作完成后,无论是当前页面还是指定的其他页面,都会根据目标 URL 重新加载,用户看到的始终是最新的页面内容。
    11、宫论APP端的页面路由处理已实现全面监听,对于页面的访问、后退、销毁以及初始化等操作均设置了对应的监听器以执行相应的响应处理。在页面请求阶段,通过xinle_page_open方法接管并执行处理;当用户触发页面后退时,则由xinle_page_back方法负责响应;而页面刷新操作则交由xinle_page_refresh方法进行处理。整个路由的响应逻辑完全依托于Framework7框架进行管理,确保页面切换的流畅性与稳定性。
  • 查看全文
  • 查看作者
  • 文章测试

    江西·萍乡
  • 4
  • 54
  • 0
  • 20.22w
  • 咸鱼梦想小可鸭鸭小小乐学藏官方

    请登录之后再进行评论

    登录
  • 0
    欣然lv.1
    最低多少钱?最低多少钱?
  • 0
    咸鱼梦想lv.2实名用户
    测试看看最低多少钱?
  • 0
    咸鱼梦想lv.2实名用户
    内容测试出
  • 查看全文
  • 查看作者
  • 鉴定师入驻协议

    欢迎使用宫论APP鉴定师入驻申请功能,本协议主要阐述您申请成为相关领域鉴定师的相关的权利和义务,请您务必仔细阅读。一、概述 1、本协议内容包括协议正文及所有宫论已经发布或将来可能发布的关于鉴定师入驻。所有规则为本协议不可分割的一部分,与协议正文具有同...
  • 学藏官方 学藏官方
  • 3
  • 50
  • 1.7k
  • 官网公告
  • 2023-03-20 09:21 电脑端
  • 查看全文
  • 查看作者
  • 宫论藏品寄售协议

    欢迎使用宫论App藏品寄售申请功能,本协议主要阐述您作为藏品持宝人相关的权利和义务,请您务必仔细阅读。一、概述 1、本协议内容包括协议正文及所有宫论已经发布或将来可能发布的关于藏品寄售的规则。所有规则为本协议不可分割的一部分,与协议正文具有同等法律效...
  • 学藏官方 学藏官方
  • 1
  • 1
  • 1.9k
  • 官网公告
  • 2023-03-17 08:58 电脑端
  • 查看全文
  • 查看作者
  • 藏品回收申请协议

    欢迎使用宫论APP藏品回收功能,本协议主要阐述您作为藏品持宝人相关的权利和义务,请您务必仔细阅读。一、概述 1、本协议内容包括协议正文及所有宫论已经发布或将来可能发布的关于藏品回收的规则。所有规则为本协议不可分割的一部分,与协议正文具有同等法律效力。...
  • 学藏官方 学藏官方
  • 1
  • 1
  • 1.6k
  • 官网公告
  • 2023-03-13 09:29 电脑端
  • 查看全文
  • 查看作者
  • 宫论藏品鉴定协议

    欢迎使用宫论APP鉴赏功能,本协议主要阐述您作为藏品持宝人相关的权利和义务,请您务必仔细阅读。一、概述 1、本协议内容包括协议正文及所有宫论已经发布或将来可能发布的各类规则。所有规则为本协议不可分割的一部分,与协议正文具有同等法律效力。 2...
  • 学藏官方 学藏官方
  • 1
  • 0
  • 1.6k
  • 官网公告
  • 2023-03-11 15:17 电脑端
  • 查看全文
  • 查看作者
  • 淘货发布协议

    淘货发布协议在宫论APP为了能够约束好每个卖家发布商品,也制定了统一的商品发布规范,如果各位也想要开淘宝店铺,那就需要好好去了解一下宫论APP商品的发布规范。第一章 概述第一条【适用范围】适用于在宫论APP发布商品的卖家。第二条【效力级别】本规范已有规定的,适...
  • 学藏官方 学藏官方
  • 2
  • 0
  • 1.7k
  • 官网公告
  • 2023-03-09 15:33 电脑端
  • 查看全文
  • 查看作者
  • 宫论提现协议

    宫论提现协议 《宫论钱包提现协议》(以下简称“本协议”)适用于所有在宫论平台进行提现的用户(以下或称“您”)。本协议被视为《宫论用户服务条款》的补充协议,是其不可分割的组成部分,与其构成统一整体。本协议与《宫论用户服务条款》内容存在冲突的,以本协议为...
  • 学藏官方 学藏官方
  • 2
  • 0
  • 1.6k
  • 官网公告
  • 2023-03-09 11:44 电脑端
  • 查看全文
  • 查看作者
  • 消费者保障服务协议

    本协议由您与济南谋佐科技有限公司共同缔结,本协议具有合同效力。本协议中协议双方合称协议方,济南谋佐科技公司在本协议中亦称为“宫论”。一、协议内容及生效1、本协议内容包括协议正文及所有宫论已经发布或后续发布的相关的规则与协议。前述规则与协议为本协议不可分割的组成...
  • 学藏官方 学藏官方
  • 2
  • 0
  • 1.4k
  • 官网公告
  • 2023-02-25 20:27 电脑端
  • 查看全文
  • 查看作者
  • 店铺保证金协议

    一、什么是店铺保证金?店铺保证金是如果涉及理赔、违规处罚等情况时,可利用店铺保证金进行支付;如没有前述情况,店铺保证金可全额退回的一种机制。二、为什么要缴纳店铺保证金?(1)重点强调-店铺无违规情况认证有效期内且缴纳店铺保证金后下个整点,可搜索到店铺,若未缴纳...
  • 学藏官方 学藏官方
  • 1
  • 0
  • 1.7k
  • 官网公告
  • 2023-02-25 20:20 电脑端
  • 查看全文
  • 查看作者
  • 宫论特殊类目经营资质

    尊敬的宫论商家:为了保障宫论类目健康、提升交易体验、维护商家及买家利益,现对于以下类目入驻认证需提供对应资质:类目店铺类型需要资质陨石骨牙-骨石企业/个人①与平台店铺认证主体信息一致的水野生保护动物经营利用许可证及副本(如许可证上未列举所有可经营物种明细的需额...
  • 学藏官方 学藏官方
  • 1
  • 0
  • 1.6k
  • 官网公告
  • 2023-02-25 20:16 电脑端
  • 单栏布局 列表样式:矩状 侧栏位置: