HTML載入FLASH(*.swf文件)詳解

来源:https://www.cnblogs.com/aizai846/archive/2019/08/14/11348144.html
-Advertisement-
Play Games

在web項目中經常會遇到線上瀏覽word文檔,通常解決方法將word轉換成pdf,然後線上瀏覽,但是在實際實現過程中,由於閱讀器的原因,用戶可以直接下載該pdf,這顯然不是我們想要的,通過網路搜索,發現可以將word文檔轉換成swf文件,通過flash實現線上瀏覽,本文將詳細介紹具體實現的方法。 ...


引言

在web項目中經常會遇到線上瀏覽word文檔,通常解決方法將word轉換成pdf,然後線上瀏覽,但是在實際實現過程中,由於閱讀器的原因,用戶可以直接下載該pdf,這顯然不是我們想要的,通過網路搜索,發現可以將word文檔轉換成swf文件,通過flash實現線上瀏覽,本文將詳細介紹具體實現的方法。

Word生成flash文件

下載安裝Print2Flash,具體破解安裝步驟下載頁面都有(這裡不提倡運用盜版軟體)。

安裝完成,打開需要轉換成swf文件的word文檔,單擊【開始】-【列印】,印表機選擇“Print2Flash 3 Printer”,如下圖所示。

單擊【列印】按鈕,根據不同的需求設置生成flash選項,如下圖所示(屏蔽列印等一些按鈕)。

設置完成後,單擊【OK】按鈕,在彈出的對話框(如下圖)中,單擊【Save Flash】按鈕,設置保存路徑及名稱,完成swf文件的導出。

HTML載入Flash文件

Flash的嵌入這裡介紹兩種方法,一種是傳統方法使用 object 和 embed 標簽來嵌入,另一種是JS嵌入。

 傳統的方法

 具體代碼如下:

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"codebase="<a href="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0">http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0</a>" width="550" height="400" id="Untitled-1" align="middle"> 
<param name="allowScriptAccess" value="sameDomain" /> 
<param name="movie" value="mymovie.swf" /> 
<param name="quality" value="high" /> 
<param name="bgcolor" value="#ffffff" /> 
<embed src="mymovie.swf" quality="high" bgcolor="#ffffff" width="550" height="400"name="mymovie" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="<a href="http://www.macromedia.com/go/getflashplayer">http://www.macromedia.com/go/getflashplayer</a>" /> 
</object>

該方法是使用 object 和 embed 標簽來嵌入,細心的會發現,object 的很多參數和 embed 裡面的很多屬性是重覆的,為什麼這樣做?為了瀏覽器相容性,有的瀏覽器支持 object,有的支持 embed,這也是為什麼要修改 Flash 的參數時兩個地方都要改的原因。

該種方法是 Macromedia 一直以來的官方方法,最大限度的保證了 Flash 的功能,沒有相容性問題。但是它現在不那麼好用了: 無法通過驗證,由於為了相容性而嵌入的 embed 標簽是不符合 W3C 的規範的。當然,如果你不在乎什麼規範不規範,另當別論。

微軟由於種種原因,在 sp2 後限制了 IE 的 ActiveX 的使用模式,就是在頁面中的 ActiveX 有一個虛框,需要用戶點擊一次才能正常交互。Flash是作為一個 ActiveX 嵌入到網頁中的,所以它也會受牽連,只有通過 JS 嵌入 Flash 才能解決這個問題。

沒有 Flash 版本檢測,如果版本瀏覽器的flash插件版本不夠,或者不能正常顯示你的 swf 文件,或者會彈出一個 ActiveX 的確認安裝的框——這個框對很多用戶來說是很恐怖的。

用JS嵌入的方法

用JS嵌入就是各有各的嵌入方法了,有嵌得好的有嵌得不好的。有人用 document.write 直接寫,這法子說實話不大好,感覺 hack 成分多了,有點為了驗證而驗證的意思,而且沒有體現出什麼 JS 的優勢。我覺得一個好的 JS 嵌入腳本,在保證 Flash 應有功能的基礎上,要發揮 JS 的優勢應該要有版本檢測,要能很好解決可訪問性問題(也就是用戶在無法瀏覽 Flash 內容或禁用 JS 的時候應該如何處理的問題),要易於重覆使用。

我們這裡要講的是SWFObject這個解決方案:

“SWFObject”是利用Javascript 插入flash,好處多多,代碼簡潔,不會出現IE6下的“單擊此處以激活控制項”的提示,並且能通過W3C驗證。不同於傳統的“object”插入flash的方法。

SWFObject在新的2.x版本中,其最簡單的調用竟只需一句話,並且不需要等待頁面載入完成,這意味著你可以將這句話寫在頁面的任何地方。比以前的版本,要簡便多了。下麵來看幾個簡單常用的調用方法:

1、最簡單,最基本,只要想插入flash都能用到的經典一句話。
<div id="myflash"></div> 
<script type="text/javascript" src="swfobject.js"></script> 
<script type="text/javascript">
swfobject.embedSWF("test.swf", "myflash", "300", "120", "9.0.0"); 
</script>

註解:調用方法embedSWF——插入SWF文件,參數依次是@swf文件的地址;@用於裝入swf文件的容器(如div)的id;@flash的寬度;@flash的高度(當然,這裡的寬高都可以使用諸如100%這樣的百分比來表示);@正常播放該flash所需的最低版本;@當版本低於要求時,執行該swf文件,這裡利用這個flash跳轉到官方下載最新版本的flash插件。(該參數可以省略)在同一個頁面插入多個flash到不同位置時,只要重覆上面的語句,使用不同的容器id就可以了。

具體效果如下圖所示。

 

2、給swf文件傳遞參數、變數、屬性的調用方法
<script type="text/javascript" src="swfobject.js"></script> 
<script type="text/javascript"> 
//1、使用Json初始化變數、參數、屬性 
var flashvars = {
name1: "hello",
name2: "world",
name3: "foobar"
};
var params = {
menu: "false"
};
var attributes = {
id: "dynamicContent2",
name: "dynamicContent2"
};
swfobject.embedSWF("test6_flashvars.swf", "content2", "300", "120", "6.0.0","expressInstall.swf", flashvars, params, attributes); </p> <p>//2、傳統的初始化設置,效果一樣 
var flashvars = {};
flashvars.name1 = "hello";
flashvars.name2 = "world";
flashvars.name3 = "foobar";
var params = {};
params.menu = "false";
var attributes = {};
attributes.id = "dynamicContent3";
attributes.name = "dynamicContent3";
swfobject.embedSWF("test6_flashvars.swf", "content3", "300", "120", "6.0.0","expressInstall.swf", flashvars, params, attributes); 
//3、直接寫在後面,就一句話,簡潔剽悍,不拖泥帶水 
swfobject.embedSWF("test6_flashvars.swf", "content5", "300", "120", "6.0.0","expressInstall.swf", {name1:"hello",name2:"world",name3:"foobar"}, {menu:"false"}, {id:"dynamicContent5",name:"dynamicContent5"}); 
</script>

總結

本文解決了word文檔線上瀏覽中遇到所有問題,提升的過程就是不斷總結的過程,希望本文對你解決該問題有實際性的幫助,若本文若有不足之處,還望海涵。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前兩天在論壇上看到一個問題,大意是怎麼在UBUNTU下使用NDK r20編譯FFmpeg。我第一反應是不該用r20,因為我在很早前用過沒有gcc版本的NDK,發現有很多問題不能編譯,就立馬回覆了個使用r12b來編譯。回到家我細想了一下,如果我就是想要用r20的NDK編譯最新的FFmpeg呢?不如我們 ...
  • 文章轉載自:http://www.pythonheidong.com/blog/article/3310/ 註:本文來自“安卓公車” Android面試題 1. 下列哪些語句關於記憶體回收的說明是正確的? (b ) A、 程式員必須創建一個線程來釋放記憶體 B、 記憶體回收程式負責釋放無用記憶體 C、 記憶體 ...
  • 文章轉載自:http://www.pythonheidong.com/blog/article/3307/ 上一篇文章列出了共32道IOS面試題: http://www.cnblogs.com/fkdd/archive/2012/03/13/2394724.html 下麵從第一題開始解答: 題目:1 ...
  • Javascript 有一個 main thread 主線程和 call-stack 調用棧(執行棧),所有的任務都會被放到調用棧等待主線程執行。 JS調用棧採用的是後進先出的規則,當函數執行的時候,會被添加到棧的頂部,當執行棧執行完成後,就會從棧頂移出,直到棧內被清空。 Javascript單線程 ...
  • 一、CSS顯示模式​ 1.在HTML中HTML將所有的標簽分為兩類,分別是容器類和文本級。在CSS中CSS也將所有的標簽分為兩類,分別是塊級元素和行內元素 2.什麼是塊級元素呢?什麼是行內元素​? (1)塊級元素會獨占一行 (2)行內元素不會獨占一行 3.塊級元素 p div h ul ol dl ...
  • 作為一個致力於前端開發的人員,能夠熟練掌握javascript的原理和機制是每個小白的必經之路,這也是最痛苦的。有人說前端功力好不好最主要的就是看對js的掌握能力,有人說十年也啃不完一門javascript。而我們能夠知道的是:javascript是每個前端學習的核心技能(想想之後的node.js、 ...
  • 今天,一個技術群里小朋友提出一個問題: 我默念心中的萬能公式,答案一下就出來了: a; 報錯(f.b is not a function); a; b; 這下子出題人產生了疑惑,你是控制台敲出來的吧! 但其實,原型鏈真的很簡單。話不多說,開始表演! 首先,我們簡單介紹一下,實例化一個對象(new)到 ...
  • 示例代碼托管在: "http://www.github.com/dashnowords/blogs" 博客園地址: "《大史住在大前端》原創博文目錄" 華為雲社區地址: "【你要的前端打怪升級指南】" [TOC] 分享一篇尤大大演講鎮樓: "「2019 JSConf.Asia 尤雨溪」在框架設計中尋 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...