釘釘-企業內部應用-H5微應用開發記錄


記錄一次企業內部應用-H5微應用開發

  • vue-cli3
  • vue-2.x

創建微應用並成為開發者

登錄釘釘開放平台,創建過程可見官方文檔:創建應用

內網穿透

https://ding-doc.dingtalk.com/doc#/kn6zg7/hb7000
這里我配置的映射域名是fanlinqiang,本地vue工程起的端口是8081,則執行:

./ding -config=./ding.cfg -subdomain=fanlinqiang 8081

瀏覽器訪問:http://fanlinqiang.vaiwan.com/,能正常訪問工程頁面則表示穿透代理成功,
此時若已授權dd客戶端用戶,配置開發平台內配置H5微應用基礎信息:應用首頁地址\PC端首頁地址為http://fanlinqiang.vaiwan.com/

在本機打開dd客戶端訪問:工作=》對應的微應用,頁面也是正常打開

遇到的問題

vue-cli搭建的環境,訪問時顯示:Invalid Host header
解決方案見:https://blog.csdn.net/Cookysurongbin/article/details/86077241
原因:因為新版的webpack-dev-server出於安全考慮,默認檢查hostname,如果hostname不是配置內的就不能訪問。

即在vue.config.js下:

...
devServer: {
        disableHostCheck: true, // 增加
...

在pc端瀏覽器直接調試頁面時

index.js?022d:1 Uncaught (in promise) Error: Do not support the current environment:notInDingTalk
    at e.bridgeInitFn (index.js?022d:1)
    at e.invokeAPI (index.js?022d:1)
    at Object.requestAuthCode$ [as requestAuthCode] (requestAuthCode.js?09df:1)
    at VueComponent.created (index.vue?6ced:29)
    at invokeWithErrorHandling (vue.runtime.esm.js?6e6d:1854)
    at callHook (vue.runtime.esm.js?6e6d:4213)
    at VueComponent.Vue._init (vue.runtime.esm.js?6e6d:5002)
    at new VueComponent (vue.runtime.esm.js?6e6d:5148)
    at createComponentInstanceForVnode (vue.runtime.esm.js?6e6d:3283)
    at init (vue.runtime.esm.js?6e6d:3114)

解決方案:
在釘釘官方提供的dingtalk-jsapi源碼中dingtalk-jsapi/lib/packages/dingtalk-javascript-env/index.d.ts
中有定義:

declare const env: {
    isDingTalk: boolean;
    isWebiOS: boolean;
    isWebAndroid: boolean;
    isWeexiOS: boolean;
    isWeexAndroid: boolean;
    isDingTalkPCMac: boolean;
    isDingTalkPCWeb: boolean;
    isDingTalkPCWindows: boolean;
    isDingTalkPC: boolean;
    runtime: any;
    framework: any;
    platform: string;
    version: any;
    isWeex: boolean;
};
export default env;

可以通過這些值來判定當前的環境,在dd.ready前加判定


            import * as dd from 'dingtalk-jsapi';
            ... ...
            
            if (dd.env.platform !== 'notInDingTalk') { // 如果在釘釘環境中
                dd.ready(function () {
                    dd.runtime.permission.requestAuthCode({
                        corpId,
                        onSuccess ({ code })  {
                            if (code) {
                                vm.getUserInfo({ code });
                            } else {
                                vm.auth.loading = false;
                            }
                        },
                        onFail () {
                            vm.auth.loading = false;
                        }
                    });
                });
            }

釘釘白名單IP及域名

https://csmobile.alipay.com/detailSolution.htm?knowledgeType=1&scene=dd_gdwt&questionId=201602058403&spm=a311a.9588098.0.0

開發者平台設置多管理員

項目開發過程中,經常需要更改配置,設置多個管理員方便開發調試,方法引至釘釘
只有企業主管理員可以為企業內部員工添加開發者賬號,添加賬號途徑如下:

  1. 主管理員登錄釘釘管理后台,點擊設置,點擊子管理員
  2. 點擊添加,並選擇需要授予權限的成員,以及具體的權限;
    注意:(1)對於通訊錄權限等,請按需授予;(2)如果只需要開發者權限,僅勾選開發者權限即可
  3. 被授予的成員,可以登錄開發者后台,首次需要設置密碼

h5頁面meta設置

  • 字符編碼
<meta charset="utf-8">
  • 設置瀏覽器的兼容模式(讓IE使用最新的瀏覽器渲染)
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
  • 視口
<meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0"/>

作用:在移動瀏覽器中,當頁面寬度超出設備,瀏覽器內部虛擬的一個頁面容器,將頁面容器縮放到設備那么大展示;
視口的寬度可以通過meta標簽設置;
此屬性為移動端頁面視口設置;
width:視口的寬度,width=device-width:寬度是設備的寬度
initial-scale:初始化縮放,- initial-scale=1.0:不縮放
user-scalable:是否允許用戶自行縮放,取值0或1,yes或no
minimum-scale:最小縮放
maximum-scale:最大縮放
一般設置了不允許縮放,就沒必要設置最大最小縮放了。
  • Cache-Control頭域
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate"/>
Cache-Control指定請求和響應遵循的緩存機制。在請求消息或響應消息中設置Cache-Control並不會修改另一個消息處理過程中的緩存處理過程。請求時的緩存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,響應消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。各個消息中的指令含義如下,
no-cache指示請求或響應消息不能緩存
no-store用於防止重要的信息被無意的發布。在請求消息中發送將使得請求和響應消息都不使用緩存
must-revalidate:告訴瀏覽器、緩存服務器,本地副本過期前,可以使用本地副本;本地副本一旦過期,必須去源服務器進行有效性校驗。
no-siteapp:禁用轉碼,例如通過百度手機打開網頁時,百度可能會對你的網頁進行轉碼
  • 是用於設定禁止瀏覽器從本地機的緩存中調閱頁面內容,設定后一旦離開網頁就無法從Cache中再調出
<meta http-equiv="Pragma" content="no-cache"/>
  • 禁止將頁面中的一連串數字識別為電話號碼、郵箱、地圖。默認為yes
<meta name="format-detection" content="telephone=no,email=no,adress=no"/>
  • 刪除默認的蘋果工具欄和菜單欄,默認顯示。
<meta content="no" name="apple-mobile-web-app-capable"/>
  • 控制狀態欄顯示樣式,ios原生瀏覽器添加到主屏后設置狀態欄的背景顏色
<meta content="black" name="apple-mobile-web-app-status-bar-style"/>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM