我出现的问题是wx.previewFile能调用到,但文件预览没出来。环境是微信小程序开发工具企业微信模式(基础库有试过:2.12.13、2.10.1、2.8.3、2.4.0),安卓手机(华为mate10pro),企业微信版本是3.1.19。
web-view 代码如下:
<view >
<web-view src="{{requestUrl}}/lookDoc.html?{{webViewURLParam.fileURL}}&{{webViewURLParam.fileName}}&{{webViewURLParam.fileSize}}&{{corpId}}&{{enCodeReqURL}}&{{c_t}}&{{fromType}}"></web-view>
</view>
lookDoc.html如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>地球人</title>
</head>
<body>
<div id="app"></div>
<script src="//res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
<script>
var fileURL;
(function(){
var params = location.search.substring(1).split("&");
//alert("params:"+params);
if(null==params||undefined==params||params.length<=0||null==params[0]||undefined==params[0]||""==params[0]||"undefined"==params[0]){
alert("获取不到文件地址。请返回重试!");
return;
}
//alert("wx.previewFile:"+wx.previewFile);
var url=decodeURIComponent(params[0]),fileName=decodeURIComponent(params[1]),reqURL=decodeURIComponent(params[4]);
fileURL=reqURL+"/067fd6610b564949af84eb418b4a6755.pptx";
var reqParams={"agentId":window.location.href};
var xhr = new XMLHttpRequest();
xhr.open("POST", reqURL+"/my/loadSingnature", true);
xhr.setRequestHeader("Content-type", "application/json");
xhr.setRequestHeader("kbn-version", "5.3.0");
xhr.setRequestHeader("c_t", params[5]);
xhr.setRequestHeader("fromType", params[6]);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
var str=xhr.responseText,singnature=xhr.getResponseHeader("singnature"),longTime=Number(xhr.getResponseHeader("longTime")),randomStr=xhr.getResponseHeader("randomStr");
if(str.indexOf("Success")>-1){
//alert(singnature+"\n"+longTime+"\n"+randomStr+"\n"+window.location.href);
window.wx.config({
beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: params[3], // 必填,企业微信的corpID
timestamp:longTime, // 必填,生成签名的时间戳
nonceStr: randomStr, // 必填,生成签名的随机串
signature: singnature,// 必填,签名,见 附录-JS-SDK使用权限签名算法
jsApiList: ["previewFile"] // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
});
wx.ready(function(rea){//alert("wx.ready:"+rea);
// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,
//则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
/*alert("wx.previewFile read:"+wx.previewFile);
wx.checkJsApi({
jsApiList: ['previewFile'], // 需要检测的JS接口列表
success: function(res) {
// 以键值对的形式返回,可用的api值true,不可用为false
// 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
alert("checkJsApi_res:"+res);
}
});*/
//pdf 126552 c60f4567b4f749389f8b224ff926400f.pdf
var pdfURL=reqURL+"/c60f4567b4f749389f8b224ff926400f.pdf";
window.wx.invoke("previewFile",{
url: pdfURL, // 需要预览文件的地址(必填,可以使用相对路径)
//name: "c60f4567b4f749389f8b224ff926400f.pdf", // 需要预览文件的文件名,必须有带文件格式的后缀,例如.doc(不填的话取url的最后部分,最后部分是个包含格式后缀的文件名)
size: 126552//params[2], // 需要预览文件的字节大小(必填,而且大小必须正确,否则会打开失败)
});
/*//doc 31742 c522e139a67246bab028a0b7898d5d05.docx
var docURL=reqURL+"/c522e139a67246bab028a0b7898d5d05.docx";
window.wx.invoke("previewFile",{
url: pdfURL, // 需要预览文件的地址(必填,可以使用相对路径)
name: "c522e139a67246bab028a0b7898d5d05.docx", // 需要预览文件的文件名,必须有带文件格式的后缀,例如.doc(不填的话取url的最后部分,最后部分是个包含格式后缀的文件名)
size: 31742//params[2], // 需要预览文件的字节大小(必填,而且大小必须正确,否则会打开失败)
});
//excel 31685 b26c51b4808e443d9979c09d5e7b4c4b.xlsx
var excelURL=reqURL+"/b26c51b4808e443d9979c09d5e7b4c4b.xlsx";
window.wx.invoke("previewFile",{
url: excelURL, // 需要预览文件的地址(必填,可以使用相对路径)
name: "b26c51b4808e443d9979c09d5e7b4c4b.xlsx", // 需要预览文件的文件名,必须有带文件格式的后缀,例如.doc(不填的话取url的最后部分,最后部分是个包含格式后缀的文件名)
size: 31685//params[2], // 需要预览文件的字节大小(必填,而且大小必须正确,否则会打开失败)
});
window.wx.invoke("previewFile",{
url: fileURL, // 需要预览文件的地址(必填,可以使用相对路径)
name: "067fd6610b564949af84eb418b4a6755.pptx", // 需要预览文件的文件名,必须有带文件格式的后缀,例如.doc(不填的话取url的最后部分,最后部分是个包含格式后缀的文件名)
size: 1983995//params[2], // 需要预览文件的字节大小(必填,而且大小必须正确,否则会打开失败)
});*/
});
wx.error(function(res){alert("wx.config error:"+res);
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
});
}else{
alert("获取企业微信JS SDK调用签名失败,无法预览!");
}
}
}
};
xhr.send(stringify(reqParams));
})();
function stringify(jsonObj) {
var result = '',
curVal;
if (jsonObj === null) {
return String(jsonObj);
}
switch (typeof jsonObj) {
case 'number':
case 'boolean':
return String(jsonObj);
case 'string':
return '"' + jsonObj + '"';
case 'undefined':
case 'function':
return undefined;
}
switch (Object.prototype.toString.call(jsonObj)) {
case '[object Array]':
result += '[';
for (var i = 0, len = jsonObj.length; i < len; i++) {
curVal = JSON.stringify(jsonObj[i]);
result += (curVal === undefined ? null : curVal) + ",";
}
if (result !== '[') {
result = result.slice(0, -1);
}
result += ']';
return result;
case '[object Date]':
return '"' + (jsonObj.toJSON ? jsonObj.toJSON() : jsonObj.toString()) + '"';
case '[object RegExp]':
return "{}";
case '[object Object]':
result += '{';
for (i in jsonObj) {
if (jsonObj.hasOwnProperty(i)) {
curVal = JSON.stringify(jsonObj[i]);
if (curVal !== undefined) {
result += '"' + i + '":' + curVal + ',';
}
}
}
if (result !== '{') {
result = result.slice(0, -1);
}
result += '}';
return result;
case '[object String]':
return '"' + jsonObj.toString() + '"';
case '[object Number]':
case '[object Boolean]':
return jsonObj.toString();
}
}
//document.ready(function(){
//});
</script>
<!--<div>
<button onclick="myButton()" style="width:260px;height:80px;font-size:28px;">点击</button>
</div>-->
</body>
</html>
开发工具:
手机端:
你好,jsapi 预览文件接口目前仅支持 在企业微信app端调用的 ,在安卓终端调用是什么表现