• 微信小程序加载在线PDF,并禁用下载


    微信小程序本身不支持屏蔽下载按钮加载在线pdf。因此,需要通过其它方式进行加载。

    在这里,使用当前最新版的pdf.js 3.0+,点击跳转至下载地址

    1、修改View.html

    下载后,可以屏蔽下载按钮,修改view.html如下:

    1. html>
    2. <html dir="ltr" mozdisallowselectionprint>
    3. <head>
    4. <meta charset="utf-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    6. <meta name="google" content="notranslate">
    7. <title>浏览title>
    8. <link rel="stylesheet" href="viewer.css">
    9. <link rel="resource" type="application/l10n" href="locale/locale.properties">
    10. <script src="../build/pdf.js">script>
    11. <script src="viewer.js">script>
    12. head>
    13. <body tabindex="1">
    14. <div id="outerContainer">
    15. <div id="sidebarContainer">
    16. <div id="toolbarSidebar">
    17. <div id="toolbarSidebarLeft">
    18. <div id="sidebarViewButtons" class="splitToolbarButton toggled" role="radiogroup">
    19. <button id="viewThumbnail" class="toolbarButton toggled" title="Show Thumbnails" tabindex="2" data-l10n-id="thumbs" role="radio" aria-checked="true" aria-controls="thumbnailView">
    20. <span data-l10n-id="thumbs_label">Thumbnailsspan>
    21. button>
    22. <button id="viewOutline" class="toolbarButton" title="Show Document Outline (double-click to expand/collapse all items)" tabindex="3" data-l10n-id="document_outline" role="radio" aria-checked="false" aria-controls="outlineView">
    23. <span data-l10n-id="document_outline_label">Document Outlinespan>
    24. button>
    25. <button id="viewAttachments" class="toolbarButton" title="Show Attachments" tabindex="4" data-l10n-id="attachments" role="radio" aria-checked="false" aria-controls="attachmentsView">
    26. <span data-l10n-id="attachments_label">Attachmentsspan>
    27. button>
    28. <button id="viewLayers" class="toolbarButton" title="Show Layers (double-click to reset all layers to the default state)" tabindex="5" data-l10n-id="layers" role="radio" aria-checked="false" aria-controls="layersView">
    29. <span data-l10n-id="layers_label">Layersspan>
    30. button>
    31. div>
    32. div>
    33. <div id="toolbarSidebarRight">
    34. <div id="outlineOptionsContainer" class="hidden">
    35. <div class="verticalToolbarSeparator">div>
    36. <button id="currentOutlineItem" class="toolbarButton" disabled="disabled" title="Find Current Outline Item" tabindex="6" data-l10n-id="current_outline_item">
    37. <span data-l10n-id="current_outline_item_label">Current Outline Itemspan>
    38. button>
    39. div>
    40. div>
    41. div>
    42. <div id="sidebarContent">
    43. <div id="thumbnailView">
    44. div>
    45. <div id="outlineView" class="hidden">
    46. div>
    47. <div id="attachmentsView" class="hidden">
    48. div>
    49. <div id="layersView" class="hidden">
    50. div>
    51. div>
    52. <div id="sidebarResizer">div>
    53. div>
    54. <div id="mainContainer">
    55. <div class="findbar hidden doorHanger" id="findbar">
    56. <div id="findbarInputContainer">
    57. <input id="findInput" class="toolbarField" title="Find" placeholder="Find in document…" tabindex="91" data-l10n-id="find_input" aria-invalid="false">
    58. <div class="splitToolbarButton">
    59. <button id="findPrevious" class="toolbarButton" title="Find the previous occurrence of the phrase" tabindex="92" data-l10n-id="find_previous">
    60. <span data-l10n-id="find_previous_label">Previousspan>
    61. button>
    62. <div class="splitToolbarButtonSeparator">div>
    63. <button id="findNext" class="toolbarButton" title="Find the next occurrence of the phrase" tabindex="93" data-l10n-id="find_next">
    64. <span data-l10n-id="find_next_label">Nextspan>
    65. button>
    66. div>
    67. div>
    68. <div id="findbarOptionsOneContainer">
    69. <input type="checkbox" id="findHighlightAll" class="toolbarField" tabindex="94">
    70. <label for="findHighlightAll" class="toolbarLabel" data-l10n-id="find_highlight">Highlight Alllabel>
    71. <input type="checkbox" id="findMatchCase" class="toolbarField" tabindex="95">
    72. <label for="findMatchCase" class="toolbarLabel" data-l10n-id="find_match_case_label">Match Caselabel>
    73. div>
    74. <div id="findbarOptionsTwoContainer">
    75. <input type="checkbox" id="findMatchDiacritics" class="toolbarField" tabindex="96">
    76. <label for="findMatchDiacritics" class="toolbarLabel" data-l10n-id="find_match_diacritics_label">Match Diacriticslabel>
    77. <input type="checkbox" id="findEntireWord" class="toolbarField" tabindex="97">
    78. <label for="findEntireWord" class="toolbarLabel" data-l10n-id="find_entire_word_label">Whole Wordslabel>
    79. div>
    80. <div id="findbarMessageContainer" aria-live="polite">
    81. <span id="findResultsCount" class="toolbarLabel">span>
    82. <span id="findMsg" class="toolbarLabel">span>
    83. div>
    84. div>
    85. <div class="editorParamsToolbar hidden doorHangerRight" id="editorFreeTextParamsToolbar">
    86. <div class="editorParamsToolbarContainer">
    87. <div class="editorParamsSetter">
    88. <label for="editorFreeTextColor" class="editorParamsLabel" data-l10n-id="editor_free_text_color">Colorlabel>
    89. <input type="color" id="editorFreeTextColor" class="editorParamsColor" tabindex="100">
    90. div>
    91. <div class="editorParamsSetter">
    92. <label for="editorFreeTextFontSize" class="editorParamsLabel" data-l10n-id="editor_free_text_size">Sizelabel>
    93. <input type="range" id="editorFreeTextFontSize" class="editorParamsSlider" value="10" min="5" max="100" step="1" tabindex="101">
    94. div>
    95. div>
    96. div>
    97. <div class="editorParamsToolbar hidden doorHangerRight" id="editorInkParamsToolbar">
    98. <div class="editorParamsToolbarContainer">
    99. <div class="editorParamsSetter">
    100. <label for="editorInkColor" class="editorParamsLabel" data-l10n-id="editor_ink_color">Colorlabel>
    101. <input type="color" id="editorInkColor" class="editorParamsColor" tabindex="102">
    102. div>
    103. <div class="editorParamsSetter">
    104. <label for="editorInkThickness" class="editorParamsLabel" data-l10n-id="editor_ink_thickness">Thicknesslabel>
    105. <input type="range" id="editorInkThickness" class="editorParamsSlider" value="1" min="1" max="20" step="1" tabindex="103">
    106. div>
    107. <div class="editorParamsSetter">
    108. <label for="editorInkOpacity" class="editorParamsLabel" data-l10n-id="editor_ink_opacity">Opacitylabel>
    109. <input type="range" id="editorInkOpacity" class="editorParamsSlider" value="100" min="1" max="100" step="1" tabindex="104">
    110. div>
    111. div>
    112. div>
    113. <div style="display: none;" id="secondaryToolbar" class="secondaryToolbar hidden doorHangerRight">
    114. <div id="secondaryToolbarButtonContainer">
    115. <button id="secondaryOpenFile" class="secondaryToolbarButton visibleLargeView" title="Open File" tabindex="51" data-l10n-id="open_file">
    116. <span data-l10n-id="open_file_label">Openspan>
    117. button>
    118. <button id="secondaryPrint" class="secondaryToolbarButton visibleMediumView" title="Print" tabindex="52" data-l10n-id="print">
    119. <span data-l10n-id="print_label">Printspan>
    120. button>
    121. <button id="secondaryDownload" class="secondaryToolbarButton visibleMediumView" title="Save" tabindex="53" data-l10n-id="save">
    122. <span data-l10n-id="save_label">Savespan>
    123. button>
    124. <div class="horizontalToolbarSeparator visibleLargeView">div>
    125. <button id="presentationMode" class="secondaryToolbarButton" title="Switch to Presentation Mode" tabindex="54" data-l10n-id="presentation_mode">
    126. <span data-l10n-id="presentation_mode_label">Presentation Modespan>
    127. button>
    128. <a href="#" id="viewBookmark" class="secondaryToolbarButton" title="Current view (copy or open in new window)" tabindex="55" data-l10n-id="bookmark">
    129. <span data-l10n-id="bookmark_label">Current Viewspan>
    130. a>
    131. <div class="horizontalToolbarSeparator">div>
    132. <button id="firstPage" class="secondaryToolbarButton" title="Go to First Page" tabindex="56" data-l10n-id="first_page">
    133. <span data-l10n-id="first_page_label">Go to First Pagespan>
    134. button>
    135. <button id="lastPage" class="secondaryToolbarButton" title="Go to Last Page" tabindex="57" data-l10n-id="last_page">
    136. <span data-l10n-id="last_page_label">Go to Last Pagespan>
    137. button>
    138. <div class="horizontalToolbarSeparator">div>
    139. <button id="pageRotateCw" class="secondaryToolbarButton" title="Rotate Clockwise" tabindex="58" data-l10n-id="page_rotate_cw">
    140. <span data-l10n-id="page_rotate_cw_label">Rotate Clockwisespan>
    141. button>
    142. <button id="pageRotateCcw" class="secondaryToolbarButton" title="Rotate Counterclockwise" tabindex="59" data-l10n-id="page_rotate_ccw">
    143. <span data-l10n-id="page_rotate_ccw_label">Rotate Counterclockwisespan>
    144. button>
    145. <div class="horizontalToolbarSeparator">div>
    146. <div id="cursorToolButtons" role="radiogroup">
    147. <button id="cursorSelectTool" class="secondaryToolbarButton toggled" title="Enable Text Selection Tool" tabindex="60" data-l10n-id="cursor_text_select_tool" role="radio" aria-checked="true">
    148. <span data-l10n-id="cursor_text_select_tool_label">Text Selection Toolspan>
    149. button>
    150. <button id="cursorHandTool" class="secondaryToolbarButton" title="Enable Hand Tool" tabindex="61" data-l10n-id="cursor_hand_tool" role="radio" aria-checked="false">
    151. <span data-l10n-id="cursor_hand_tool_label">Hand Toolspan>
    152. button>
    153. div>
    154. <div class="horizontalToolbarSeparator">div>
    155. <div id="scrollModeButtons" role="radiogroup">
    156. <button id="scrollPage" class="secondaryToolbarButton" title="Use Page Scrolling" tabindex="62" data-l10n-id="scroll_page" role="radio" aria-checked="false">
    157. <span data-l10n-id="scroll_page_label">Page Scrollingspan>
    158. button>
    159. <button id="scrollVertical" class="secondaryToolbarButton toggled" title="Use Vertical Scrolling" tabindex="63" data-l10n-id="scroll_vertical" role="radio" aria-checked="true">
    160. <span data-l10n-id="scroll_vertical_label" >Vertical Scrollingspan>
    161. button>
    162. <button id="scrollHorizontal" class="secondaryToolbarButton" title="Use Horizontal Scrolling" tabindex="64" data-l10n-id="scroll_horizontal" role="radio" aria-checked="false">
    163. <span data-l10n-id="scroll_horizontal_label">Horizontal Scrollingspan>
    164. button>
    165. <button id="scrollWrapped" class="secondaryToolbarButton" title="Use Wrapped Scrolling" tabindex="65" data-l10n-id="scroll_wrapped" role="radio" aria-checked="false">
    166. <span data-l10n-id="scroll_wrapped_label">Wrapped Scrollingspan>
    167. button>
    168. div>
    169. <div class="horizontalToolbarSeparator">div>
    170. <div id="spreadModeButtons" role="radiogroup">
    171. <button id="spreadNone" class="secondaryToolbarButton toggled" title="Do not join page spreads" tabindex="66" data-l10n-id="spread_none" role="radio" aria-checked="true">
    172. <span data-l10n-id="spread_none_label">No Spreadsspan>
    173. button>
    174. <button id="spreadOdd" class="secondaryToolbarButton" title="Join page spreads starting with odd-numbered pages" tabindex="67" data-l10n-id="spread_odd" role="radio" aria-checked="false">
    175. <span data-l10n-id="spread_odd_label">Odd Spreadsspan>
    176. button>
    177. <button id="spreadEven" class="secondaryToolbarButton" title="Join page spreads starting with even-numbered pages" tabindex="68" data-l10n-id="spread_even" role="radio" aria-checked="false">
    178. <span data-l10n-id="spread_even_label">Even Spreadsspan>
    179. button>
    180. div>
    181. <div class="horizontalToolbarSeparator">div>
    182. <button id="documentProperties" class="secondaryToolbarButton" title="Document Properties…" tabindex="69" data-l10n-id="document_properties" aria-controls="documentPropertiesDialog">
    183. <span data-l10n-id="document_properties_label">Document Properties…span>
    184. button>
    185. div>
    186. div>
    187. <div class="toolbar">
    188. <div id="toolbarContainer">
    189. <div id="toolbarViewer">
    190. <div id="toolbarViewerLeft">
    191. <button id="sidebarToggle" class="toolbarButton" title="Toggle Sidebar" tabindex="11" data-l10n-id="toggle_sidebar" aria-expanded="false" aria-controls="sidebarContainer">
    192. <span data-l10n-id="toggle_sidebar_label">Toggle Sidebarspan>
    193. button>
    194. <div class="toolbarButtonSpacer">div>
    195. <button id="viewFind" class="toolbarButton" title="Find in Document" tabindex="12" data-l10n-id="findbar" aria-expanded="false" aria-controls="findbar">
    196. <span data-l10n-id="findbar_label">Findspan>
    197. button>
    198. <div class="splitToolbarButton hiddenSmallView">
    199. <button class="toolbarButton" title="Previous Page" id="previous" tabindex="13" data-l10n-id="previous">
    200. <span data-l10n-id="previous_label">Previousspan>
    201. button>
    202. <div class="splitToolbarButtonSeparator">div>
    203. <button class="toolbarButton" title="Next Page" id="next" tabindex="14" data-l10n-id="next">
    204. <span data-l10n-id="next_label">Nextspan>
    205. button>
    206. div>
    207. <input type="number" id="pageNumber" class="toolbarField" title="Page" value="1" min="1" tabindex="15" data-l10n-id="page" autocomplete="off">
    208. <span id="numPages" class="toolbarLabel">span>
    209. div>
    210. <div id="toolbarViewerRight">
    211. <button id="openFile" class="toolbarButton hiddenLargeView" title="Open File" tabindex="31" data-l10n-id="open_file">
    212. <span data-l10n-id="open_file_label">Openspan>
    213. button>
    214. <button id="print" class="toolbarButton hiddenMediumView" title="Print" tabindex="32" data-l10n-id="print">
    215. <span data-l10n-id="print_label">Printspan>
    216. button>
    217. <button id="download" class="toolbarButton hiddenMediumView" title="Save" tabindex="33" data-l10n-id="save">
    218. <span data-l10n-id="save_label">Savespan>
    219. button>
    220. <div class="verticalToolbarSeparator hiddenMediumView">div>
    221. <div style="display: none;" id="editorModeButtons" class="splitToolbarButton toggled" role="radiogroup">
    222. <button style="display: none;" id="editorFreeText" class="toolbarButton" disabled="disabled" title="Text" role="radio" aria-checked="false" tabindex="34" data-l10n-id="editor_free_text2">
    223. <span data-l10n-id="editor_free_text2_label">Textspan>
    224. button>
    225. <button style="display: none;" id="editorInk" class="toolbarButton" disabled="disabled" title="Draw" role="radio" aria-checked="false" tabindex="35" data-l10n-id="editor_ink2">
    226. <span data-l10n-id="editor_ink2_label">Drawspan>
    227. button>
    228. div>
    229. <div id="editorModeSeparator" class="verticalToolbarSeparator">div>
    230. <button style="display: none;" id="secondaryToolbarToggle" class="toolbarButton" title="Tools" tabindex="48" data-l10n-id="tools" aria-expanded="false" aria-controls="secondaryToolbar">
    231. <span data-l10n-id="tools_label">Toolsspan>
    232. button>
    233. div>
    234. <div id="toolbarViewerMiddle">
    235. <div class="splitToolbarButton">
    236. <button id="zoomOut" class="toolbarButton" title="Zoom Out" tabindex="21" data-l10n-id="zoom_out">
    237. <span data-l10n-id="zoom_out_label">Zoom Outspan>
    238. button>
    239. <div class="splitToolbarButtonSeparator">div>
    240. <button id="zoomIn" class="toolbarButton" title="Zoom In" tabindex="22" data-l10n-id="zoom_in">
    241. <span data-l10n-id="zoom_in_label">Zoom Inspan>
    242. button>
    243. div>
    244. <span id="scaleSelectContainer" class="dropdownToolbarButton">
    245. <select id="scaleSelect" title="Zoom" tabindex="23" data-l10n-id="zoom">
    246. <option id="pageAutoOption" title="" value="auto" selected="selected" data-l10n-id="page_scale_auto">Automatic Zoomoption>
    247. <option id="pageActualOption" title="" value="page-actual" data-l10n-id="page_scale_actual">Actual Sizeoption>
    248. <option id="pageFitOption" title="" value="page-fit" data-l10n-id="page_scale_fit">Page Fitoption>
    249. <option id="pageWidthOption" title="" value="page-width" data-l10n-id="page_scale_width">Page Widthoption>
    250. <option id="customScaleOption" title="" value="custom" disabled="disabled" hidden="true">option>
    251. <option title="" value="0.5" data-l10n-id="page_scale_percent" data-l10n-args='{ "scale": 50 }'>50%option>
    252. <option title="" value="0.75" data-l10n-id="page_scale_percent" data-l10n-args='{ "scale": 75 }'>75%option>
    253. <option title="" value="1" data-l10n-id="page_scale_percent" data-l10n-args='{ "scale": 100 }'>100%option>
    254. <option title="" value="1.25" data-l10n-id="page_scale_percent" data-l10n-args='{ "scale": 125 }'>125%option>
    255. <option title="" value="1.5" data-l10n-id="page_scale_percent" data-l10n-args='{ "scale": 150 }'>150%option>
    256. <option title="" value="2" data-l10n-id="page_scale_percent" data-l10n-args='{ "scale": 200 }'>200%option>
    257. <option title="" value="3" data-l10n-id="page_scale_percent" data-l10n-args='{ "scale": 300 }'>300%option>
    258. <option title="" value="4" data-l10n-id="page_scale_percent" data-l10n-args='{ "scale": 400 }'>400%option>
    259. select>
    260. span>
    261. div>
    262. div>
    263. <div id="loadingBar">
    264. <div class="progress">
    265. <div class="glimmer">
    266. div>
    267. div>
    268. div>
    269. div>
    270. div>
    271. <div id="viewerContainer" tabindex="0">
    272. <div id="viewer" class="pdfViewer">div>
    273. div>
    274. div>
    275. <div id="dialogContainer">
    276. <dialog id="passwordDialog">
    277. <div class="row">
    278. <label for="password" id="passwordText" data-l10n-id="password_label">Enter the password to open this PDF file:label>
    279. div>
    280. <div class="row">
    281. <input type="password" id="password" class="toolbarField">
    282. div>
    283. <div class="buttonRow">
    284. <button id="passwordCancel" class="dialogButton"><span data-l10n-id="password_cancel">Cancelspan>button>
    285. <button id="passwordSubmit" class="dialogButton"><span data-l10n-id="password_ok">OKspan>button>
    286. div>
    287. dialog>
    288. <dialog id="documentPropertiesDialog">
    289. <div class="row">
    290. <span id="fileNameLabel" data-l10n-id="document_properties_file_name">File name:span>
    291. <p id="fileNameField" aria-labelledby="fileNameLabel">-p>
    292. div>
    293. <div class="row">
    294. <span id="fileSizeLabel" data-l10n-id="document_properties_file_size">File size:span>
    295. <p id="fileSizeField" aria-labelledby="fileSizeLabel">-p>
    296. div>
    297. <div class="separator">div>
    298. <div class="row">
    299. <span id="titleLabel" data-l10n-id="document_properties_title">Title:span>
    300. <p id="titleField" aria-labelledby="titleLabel">-p>
    301. div>
    302. <div class="row">
    303. <span id="authorLabel" data-l10n-id="document_properties_author">Author:span>
    304. <p id="authorField" aria-labelledby="authorLabel">-p>
    305. div>
    306. <div class="row">
    307. <span id="subjectLabel" data-l10n-id="document_properties_subject">Subject:span>
    308. <p id="subjectField" aria-labelledby="subjectLabel">-p>
    309. div>
    310. <div class="row">
    311. <span id="keywordsLabel" data-l10n-id="document_properties_keywords">Keywords:span>
    312. <p id="keywordsField" aria-labelledby="keywordsLabel">-p>
    313. div>
    314. <div class="row">
    315. <span id="creationDateLabel" data-l10n-id="document_properties_creation_date">Creation Date:span>
    316. <p id="creationDateField" aria-labelledby="creationDateLabel">-p>
    317. div>
    318. <div class="row">
    319. <span id="modificationDateLabel" data-l10n-id="document_properties_modification_date">Modification Date:span>
    320. <p id="modificationDateField" aria-labelledby="modificationDateLabel">-p>
    321. div>
    322. <div class="row">
    323. <span id="creatorLabel" data-l10n-id="document_properties_creator">Creator:span>
    324. <p id="creatorField" aria-labelledby="creatorLabel">-p>
    325. div>
    326. <div class="separator">div>
    327. <div class="row">
    328. <span id="producerLabel" data-l10n-id="document_properties_producer">PDF Producer:span>
    329. <p id="producerField" aria-labelledby="producerLabel">-p>
    330. div>
    331. <div class="row">
    332. <span id="versionLabel" data-l10n-id="document_properties_version">PDF Version:span>
    333. <p id="versionField" aria-labelledby="versionLabel">-p>
    334. div>
    335. <div class="row">
    336. <span id="pageCountLabel" data-l10n-id="document_properties_page_count">Page Count:span>
    337. <p id="pageCountField" aria-labelledby="pageCountLabel">-p>
    338. div>
    339. <div class="row">
    340. <span id="pageSizeLabel" data-l10n-id="document_properties_page_size">Page Size:span>
    341. <p id="pageSizeField" aria-labelledby="pageSizeLabel">-p>
    342. div>
    343. <div class="separator">div>
    344. <div class="row">
    345. <span id="linearizedLabel" data-l10n-id="document_properties_linearized">Fast Web View:span>
    346. <p id="linearizedField" aria-labelledby="linearizedLabel">-p>
    347. div>
    348. <div class="buttonRow">
    349. <button id="documentPropertiesClose" class="dialogButton"><span data-l10n-id="document_properties_close">Closespan>button>
    350. div>
    351. dialog>
    352. <dialog id="printServiceDialog" style="min-width: 200px;">
    353. <div class="row">
    354. <span data-l10n-id="print_progress_message">Preparing document for printing…span>
    355. div>
    356. <div class="row">
    357. <progress value="0" max="100">progress>
    358. <span data-l10n-id="print_progress_percent" data-l10n-args='{ "progress": 0 }' class="relative-progress">0%span>
    359. div>
    360. <div class="buttonRow">
    361. <button id="printCancel" class="dialogButton"><span data-l10n-id="print_progress_close">Cancelspan>button>
    362. div>
    363. dialog>
    364. div>
    365. div>
    366. <div id="printContainer">div>
    367. <input type="file" id="fileInput" class="hidden">
    368. body>
    369. html>

    2、修改view.js

    如果需要修改以文件名做为页面的Title,需要修改view.js,屏蔽掉设置document.title的代码

    3、在Nginx中发布该程序以及相应的pdf文件

    设置nginx.conf:

    1. server {
    2. listen 2000;
    3. listen [::]:2000;
    4. server_name _;
    5. root /home/data/file-db;
    6. index /html/web/viewer.html;
    7. location / {
    8. autoindex off;
    9. autoindex_exact_size off;
    10. autoindex_localtime off;
    11. }
    12. }

    把pdf文件放置在 /home/data/file-db中(含子目录)

    把pdf.js相关的web和build文件夹放在/home/data/file-db/html中。

    使用地址:http://<>:2000/html/web/viewer.html?file=http%3A%2F%2F171.84.0.40%3A2000%2Fstandard%2Fpolicy%2F10267ad6-2c0a-4056-b97a-6b158cf55698.pdf

    “?”后的部分为encodeURIcomponent()后的url,端口号需要与本服务url相同

    4、小程序中使用该服务

    1. <script>
    2. export default {
    3. data: function (){
    4. return {
    5. src: null
    6. };
    7. },
    8. onLoad(options) {
    9. this.src = 'http://171.84.0.40:20000/html/web/viewer.html?file=' + encodeURIComponent(options.url);
    10. }
    11. }
    12. script>

  • 相关阅读:
    GaussDB修改表空间占用磁盘使用率阈值
    [附源码]Python计算机毕业设计大学生兼职系统
    项目管理之低效合作
    Axure原型设计:从零开始到精通中文版
    前端组件化
    设计模式|状态机模式(State Machine Pattern)
    “安全生产月”专题报道:AI智能监控技术如何助力安全生产
    设计模式——建造者模式
    C++ 面向对象
    图的遍历 深度优先遍历(爱思创)
  • 原文地址:https://blog.csdn.net/dickence/article/details/127992316