You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

92 lines
2.3 KiB

2 years ago
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>嵌入式加载示例</title>
  6. <style>
  7. html, body {
  8. margin: 0;
  9. padding: 0;
  10. width: 100%;
  11. height: 100%;
  12. }
  13. .url {
  14. position: fixed;
  15. display: block;
  16. left: 10px;
  17. top: 10px;
  18. }
  19. .url input {
  20. width: 500px;
  21. }
  22. iframe {
  23. border: 0;
  24. padding: 0;
  25. margin: 0;
  26. min-height: 100vh;
  27. width: 100%;
  28. }
  29. </style>
  30. </head>
  31. <body>
  32. <div class="url">
  33. <select value="./word.docx" onchange="context.url = this.value" placeholder="请输入测试url">
  34. <option value="./word.docx">测试word文档</option>
  35. <option value="./excel.xlsx">测试Excel文档</option>
  36. <option value="./ppt.pptx">测试PPT文档</option>
  37. <option value="./pic.png">测试PNG图片</option>
  38. <option value="./pdf.pdf">测试PDF文档</option>
  39. <option value="./video.mp4">测试视频</option>
  40. </select>
  41. <button onclick="loadFromUrl()">预览</button>
  42. </div>
  43. <script>
  44. var context = {
  45. // 查看器的源,当前示例为在线,本地测试请改为 http://localhost:8900
  46. origin: 'http://viewer.flyfish.group',
  47. // 目标frame
  48. frame: null,
  49. // 文件url
  50. url: './word.docx'
  51. };
  52. function appendFrame(src) {
  53. if (context.frame) {
  54. document.body.removeChild(context.frame);
  55. }
  56. // 构建frame
  57. var frame = context.frame = document.createElement('iframe');
  58. frame.src = src;
  59. frame.style = ''
  60. return document.body.appendChild(frame)
  61. }
  62. function loadFromUrl() {
  63. // 要预览的文件地址
  64. var url = context.url;
  65. // 取得文件名
  66. var filename = url.substr(url.lastIndexOf('/') + 1);
  67. // 拼接iframe请求url
  68. var src = context.origin + '?name=' + encodeURIComponent(filename) + '&from=' + encodeURIComponent(location.origin);
  69. // 拼接frame
  70. var frame = appendFrame(src);
  71. // 绑定事件
  72. frame.onload = () => {
  73. fetch(url, { mode: "no-cors" }).then(function (res) {
  74. return res.blob();
  75. }).then(function (data) {
  76. if (!data) {
  77. console.error('文件下载失败');
  78. }
  79. console.log(data)
  80. frame.contentWindow.postMessage(data, context.origin);
  81. })
  82. }
  83. }
  84. loadFromUrl();
  85. </script>
  86. </body>
  87. </html>