企業微信注入agentconfig失敗的問題


微信js-sdk調用一些接口,比如企業微信集成選人接口,需要注入agentconfig,官方說法是需要加載 https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js

但是這個文件里面只有agentconfig函數,可以通過控制台Object.getOwnPropertyNames(wx)查看,而jssdk調用其它內容,必須要引用https://res.wx.qq.com/open/js/jweixin-1.2.0.js,而這個js文件里沒有agentconfig函數。

這兩個文件有先后加載順序,必須得先加載https://res.wx.qq.com/open/js/jweixin-1.2.0.js,等下載完成后,再加載https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js,否則wx這個對象會被覆蓋掉。

完整的是兩個文件合並,合並后的結果是:

[
"config",
"ready",
"error",
"checkJsApi",
"onMenuShareTimeline",
"onMenuShareAppMessage",
"onMenuShareQQ",
"onMenuShareWeibo",
"onMenuShareQZone",
"startRecord",
"stopRecord",
"onVoiceRecordEnd",
"playVoice",
"pauseVoice",
"stopVoice",
"onVoicePlayEnd",
"uploadVoice",
"downloadVoice",
"translateVoice",
"chooseImage",
"getLocation",
"previewImage",
"uploadImage",
"downloadImage",
"getLocalImgData",
"getNetworkType",
"openLocation",
"hideOptionMenu",
"showOptionMenu",
"closeWindow",
"hideMenuItems",
"showMenuItems",
"hideAllNonBaseMenuItem",
"showAllNonBaseMenuItem",
"scanQRCode",
"openAddress",
"openProductSpecificView",
"addCard",
"chooseCard",
"openCard",
"consumeAndShareCard",
"chooseWXPay",
"openEnterpriseRedPacket",
"startSearchBeacons",
"stopSearchBeacons",
"onSearchBeacons",
"openEnterpriseChat",
"agentConfig"
]

 

頁面寫入順序如下:

<script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js" type="text/javascript"></script>
<script src="https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js" type="text/javascript"></script>

 

這樣是不行的,雖然jweixin寫在上面,但是文件大,可能加載在jwxwork后面,導致wx對象仍沒有agentconfig函數。晚上有個說法是調用1.0.0文件,https://res.wx.qq.com/wwopen/js/jsapi/jweixin-1.0.0.js,這個文件里有agentconfig函數,但是是舊版的。

綜上,解決辦法是手動加載js文件

參考:https://www.cnblogs.com/xiaoniaohhl/p/11254272.html

頁面中js加載完全的方法

 

function loadScript( url, callback) {

    var script = document.createElement("script");

    script.type = "text/javascript";

    if (script.readyState) {

        script.onreadystatechange = function() {

            if (script.readyState == "loaded" || script.readyState == "complete") {

                script.onreadystatechange = null;

                callback();

            }

        }

    } else {

        script.onload = function() {

            callback();

        }

    }

    script.src = url;

    document.getElementsByName("head")[0].appendChild(script);

}

如何讓腳本的執行順序按照你設定的順序執行,使用嵌套的方式:

loadScript("file1.js", function() {

    loadScript("file2.js", function() {

        loadScript("file3.js", function() {

            alert("All files are loaded");

        });

    });

});


免責聲明!

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



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