收藏
回答

wx.previewFile能调用,但无法显示预览文件?

我出现的问题是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>

开发工具:

手机端:


回答关注问题邀请回答
收藏

1 个回答

  • 企业微信运营专员-千夜
    企业微信运营专员-千夜
    2021-11-09

    你好,jsapi 预览文件接口目前仅支持 在企业微信app端调用的 ,在安卓终端调用是什么表现

    2021-11-09
    有用
    回复
登录 后发表内容