
基本語法結構:兩種標籤的寫法
〈object〉標籤:
〈object〉用於在網頁中包含外部資源。它是一個容器型元素,需要有閉合標籤,可在其中放入參數設定或後備內容。基本用法是使用 data 屬性指定資源 URL,並用 type 屬性標明該資源的 MIME 類型。例如:
<object data="example.pdf" type="application/pdf" width="600" height="400">
<p>很抱歉,您的瀏覽器無法顯示 PDF,請改用外部連結下載。</p>
</object>
上例透過〈object〉嵌入一個 PDF 檔案。如果瀏覽器無法顯示該 PDF(例如缺少 PDF 外掛程式),〈object〉元素內容中的段落文字將作為後備提示顯示給使用者。這展示了〈object〉的一個關鍵特性:可提供後備內容。
〈embed〉標籤:
〈embed〉則是一個自閉合元素(void element),專門用來嵌入外部應用或互動內容。它沒有內部內容區域,因而無法直接提供後備內容(早期有過時的〈noembed〉元素作為替代方案,但已不建議使用)。〈embed〉的基本用法是使用 src 屬性指定資源 URL,type 指定 MIME 類型,例如:
<embed src="example.pdf" type="application/pdf" width="600" height="400" />
上述〈embed〉標籤會嘗試在頁面中直接顯示該 PDF。如果瀏覽器支援內建 PDF 檢視,它將呈現內容;否則可能什麼也不顯示(或提示下載),因為沒有後備內容可用。可以看到,〈embed〉語法上更精簡,但也較〈object〉缺乏彈性。
語法比較重點:
兩者都可以透過 width 和 height 指定顯示尺寸,也都可以用 type 說明資源的媒體類型。然而,〈object〉使用 data 屬性來填入資源 URL,並且允許在標籤內包含〈param〉子標籤或其他 HTML 作為設定及後備內容;〈embed〉使用 src,不支援子標籤。總體而言,〈object〉語法稍顯繁複但功能更全面,〈embed〉語法精簡直接。
支援的 MIME 類型與資源嵌入範圍
〈object〉與〈embed〉都屬於通用的外部內容嵌入工具,理論上可嵌入各種類型的資源,只要瀏覽器或安裝的外掛程式能夠解析。常見支援的 MIME 類型及可嵌入的資源包括:
文件與互動媒體:例如 PDF 檔案(application/pdf)、SWF 格式的 Flash 動畫(application/x-shockwave-flash)、Java Applet(application/x-java-applet)等。這些通常需要瀏覽器外掛程式支援。
影像類型:例如 PNG、JPEG、SVG 等影像(image/png, image/jpeg, image/svg+xml…)。〈object〉可以用於嵌入影像並將其視為文件內容的一部分(不過一般建議直接使用〈img〉標籤來插入圖片)。
音訊/視訊:例如 MP3 音訊(audio/mpeg)、MP4 視訊(video/mp4)等。早期在沒有專用標籤時,可用〈object〉或〈embed〉結合對應的外掛程式播放多媒體;HTML5 出現後已有〈audio〉和〈video〉標籤專門處理。
HTML/瀏覽上下文:〈object〉特別的一點是,如果嵌入的資源類型是 HTML 文件(text/html),瀏覽器會將〈object〉視為一個子瀏覽上下文,類似於內嵌框架,把另一個網頁嵌入當前頁面。〈embed〉一般不用來載入 HTML 網頁(這方面通常用〈iframe〉),它主要面向非 HTML 的外部應用內容。
簡而言之,〈object〉與〈embed〉能處理的資源範圍大致相同,涵蓋各種瀏覽器可支援或透過外掛支援的外部內容。差異在於:處理方式與預期用途略有不同。〈object〉著重於「泛用容器」,能夠包含影像、插件、甚至 HTML 子頁面等各種內容;〈embed〉著重於「直接嵌入外部應用」,典型用途是插入需要額外軟體支援的互動媒體(例如 Flash 動畫、PDF 閱讀器等)。在HTML5的規範中,兩者都被納入標準標籤,但各自強項不盡相同。
此外,兩個標籤都允許透過 type 屬性指定 MIME 類型,這有助於瀏覽器決定如何處理內容。例如,上述 PDF 的例子中明確標明 application/pdf,瀏覽器會據此調用內建的 PDF 閱讀功能或插件。如果省略 type,瀏覽器通常會根據檔案副檔名或內容嘗試判斷,但提供正確的 MIME 類型是較佳實踐,能提高解析的可靠性。值得一提的是,〈object〉標籤在 HTML5 中還引入了一個 typemustmatch 屬性,要求 type 屬性和實際資源的 MIME 類型必須一致,否則不載入。這項設計是出於安全考量,防止內容偽裝或錯用。
特點與限制:相容性、安全性與擴充性
理解〈object〉與〈embed〉的不同特點,有助於我們在實務中做出正確選擇。以下從相容性、安全性、擴充性等方面比較:
相容性(Compatibility):
從歷史角度看,〈object〉和〈embed〉的瀏覽器支援經歷了一些波折。早期(HTML4 時代),〈embed〉並非正式標準,一些瀏覽器(如 Netscape 系系瀏覽器)率先支援〈embed〉來嵌入外掛內容,而當時 IE 瀏覽器偏好使用〈object〉或 ActiveX 控制。為了兼容各家瀏覽器,過去常見的做法是在〈object〉標籤內再嵌入一個〈embed〉。例如插入 Flash 時,使用〈object〉提供給 IE,內部再放一個〈embed〉提供給其他支援它的瀏覽器。這導致不少人誤以為兩者需要搭配使用。隨著 HTML5 將〈embed〉納入標準並各大瀏覽器統一實作,現代瀏覽器普遍同時支援兩者,無需再像從前一樣疊加。而在老舊瀏覽器(特別是非常早期的 IE)中,可能存在只識別〈object〉或〈embed〉的情況,但這類環境如今已相當少見。總的來說,在現代相容性方面,兩者旗鼓相當,主流瀏覽器對〈object〉與〈embed〉均提供了不錯的支援。
安全性(Security):
由於〈object〉與〈embed〉可以載入外部資源(包括可能帶有程式碼的內容),安全性是不容忽視的議題。兩者本身並非執行程式的標籤,但它們載入的內容(例如 Flash、PDF、或其他插件)可能存在安全風險。〈object〉的優勢在於它提供一些額外的控制:如前節提到的 typemustmatch 屬性可防止 MIME 類型不符的內容載入,降低惡意內容偽裝的可能。另外,〈object〉的設計允許開發者提供替代內容(例如一段提示文字或連結),這在某種程度上也能避免使用者面對空白框架時不知所措,減少社工程誘導點擊未知內容的風險。〈embed〉的限制在於欠缺原生的後備機制和嚴格類型匹配控制,一旦引入外部內容,若該內容有漏洞或惡意程式碼,〈embed〉無法提供額外的保護層。因此,一般我們會建議對於潛在風險較高的外部內容,盡量使用〈object〉並搭配安全屬性與替代方案。同時,考慮現代瀏覽器大多已淘汰插件(例如 Flash 外掛在新版本瀏覽器中被停用),使用〈object〉或〈embed〉載入這些內容時瀏覽器本身可能攔截或警告,用戶需主動允許才能運作,這也是為了安全著想。
擴充性與彈性(Extensibility & Flexibility):
在可擴充性方面,〈object〉被視為一種萬用的容器,可透過〈param〉子標籤傳遞各種參數給外部內容。例如,嵌入影片時可以用〈param name="autoplay" value="true"〉控制是否自動播放、〈param name="quality" value="high"〉調整畫質等(具體參數名稱取決於插件或媒體播放器的約定)。〈embed〉則沒有對應的子標籤,它將所有需要的設定直接透過自己的屬性提供,如 <embed src="movie.swf" quality="high" allowFullScreen="true"> 等。這種差異意味著:〈object〉適合較複雜、需要定義多項屬性的情境,因為〈param〉讓結構清晰且未來假如標準新增更多設定,也能容納;〈embed〉適合快速插入單一媒體的情境,屬性簡潔明瞭。從擴充性的角度,〈object〉在標準演進中地位穩固(它甚至取代了更古老的〈applet〉標籤來載入各種外掛內容),而〈embed〉雖已成為標準一員,但更多是為了向後相容既有內容和提供簡便用法,功能上相對固定。此外就樣式與腳本控制而言,〈object〉和〈embed〉作為外部內容容器,其內載內容通常是獨立的,網頁的 CSS 樣式對內嵌內容影響有限(例如嵌入 PDF或Flash時,無法用外部 CSS 改變其內部文字顏色等)。您可以對〈object〉或〈embed〉元素本身進行一些CSS控制(如大小、邊框),但對於內部呈現的外部資源,能調整的部分取決於該資源本身或插件提供的介面。
歸納而言,〈object〉提供了更高的靈活度與控制力,代價是寫法稍微冗長,需要考慮各種屬性與可能的後備內容;〈embed〉提供了快捷的嵌入方式,在簡單情境下十分方便,但在更複雜或需要兼容考量的場景中略顯不足。接下來,我們將看看在嵌入不同類型的多媒體時,兩者的實際表現和取捨。
嵌入多媒體資源的比較:PDF、影片與 Flash
不同類型的外部資源,使用〈object〉或〈embed〉嵌入時有各自的典型模式和注意事項。我們以三種常見情境為例,比較兩者的使用方式:
1. PDF 文件的嵌入
使用〈object〉嵌入 PDF: 〈object〉非常適合用來在頁面中顯示 PDF 等文件型內容。它允許我們提供後備方案給沒有相容插件的環境,例如顯示一段提示或提供下載連結。範例如下:
<object data="assets/sample.pdf" type="application/pdf" width="100%" height="600">
<p>此瀏覽器不支援內嵌 PDF,您可以<a href="assets/sample.pdf">點擊此處下載檔案</a>。</p>
</object>
以上程式碼嘗試將 sample.pdf 文件直接嵌入。如果使用者的瀏覽器支援 PDF(現代瀏覽器多內建 PDF 閱讀功能,相當於自帶插件),會在頁面中顯示 PDF 內容並提供滾動、縮放等功能;若瀏覽器無法顯示(例如某些行動裝置瀏覽器沒有 PDF 閱讀能力),〈object〉元素內的段落將呈現,提示用戶無法嵌入並提供下載選項。這確保了良好的使用者體驗。
使用〈embed〉嵌入 PDF: 如果改用〈embed〉,情況會簡單但有風險:
<embed src="assets/sample.pdf" type="application/pdf" width="100%" height="600" />
在支援的瀏覽器上,這行程式碼同樣會顯示 PDF 內容。然而,若瀏覽器不支援,頁面上可能就只出現一片空白或一個錯誤圖示,而且我們無從提供替代資訊。因此嵌入 PDF 時,一般更建議使用〈object〉,至少提供一個後備方案。特別地,PDF 常被認為是適合讓使用者自行下載或在新頁面開啟的內容,內嵌閱讀雖然方便,但要注意檔案大小和行動裝置的呈現效果。
2. 視訊/音訊的嵌入
使用〈object〉/〈embed〉嵌入影片: 在 HTML5 出現之前,網頁中播放影片通常依賴瀏覽器插件(如 Flash Player 或 QuickTime)。開發者會使用〈object〉或〈embed〉載入這些插件提供的播放器。例如,要播放 MP4 檔案,以往可能這樣寫:
<object data="media/movie.mp4" type="video/mp4" width="640" height="360">
<param name="autoplay" value="false" />
<param name="controls" value="true" />
您的瀏覽器不支援內嵌影片,請嘗試下載後播放。
</object>
以上程式碼利用〈object〉載入影片檔,並透過〈param〉參數要求不自動播放 (autoplay="false")、顯示控制列 (controls="true")。如果瀏覽器具備播放 MP4 的能力(現代瀏覽器大多內建支援常見影片格式),它會直接呈現影片畫面並提供播放/暫停等控制介面;如果不支援,則顯示我們提供的備註文字。類似地,也可以將 <embed src="media/movie.mp4" type="video/mp4" width="640" height="360" /> 放入〈object〉裡作為備用方案,或者單獨使用〈embed〉插入影片。不過在影片/音訊的情境下,現在更推薦使用 HTML5 專門的〈video〉與〈audio〉標籤——它們語意清晰,內建屬性即可控制播放、字幕等,而且不依賴外掛程式。除非是為了相容非常老舊的瀏覽器或特定格式,否則純用〈object〉或〈embed〉播放媒體並非首選。
多媒體控件的出現: 值得注意的是,如果用〈embed〉直接嵌入影片或音訊檔,瀏覽器可能不會顯示播放控制(除非瀏覽器將其等同於內建播放器)。例如 <embed src="song.mp3" type="audio/mpeg" autostart="false" loop="false"> 可能只會靜靜地載入音訊流,使用者看不到任何操作介面。這就是為什麼在 HTML5 之前,很多網站使用 Flash 製作自訂播放器界面,並把 Flash 插入頁面。總之,原生媒體的播放現今交由〈video〉/〈audio〉處理更為穩當,而〈object〉與〈embed〉已較少直接用於此,但了解它們的用法對維護舊專案或特殊場景仍有意義。
3. Flash 等外掛內容的嵌入
使用〈object〉+〈embed〉嵌入 Flash: Flash 動畫曾風靡網頁世界一時。要在網頁中插入 Flash(SWF 檔案),傳統最佳實踐是同時運用〈object〉與〈embed〉,以涵蓋不同瀏覽器。典型範例如下:
<object data="media/animation.swf" type="application/x-shockwave-flash"
width="550" height="400">
<param name="allowScriptAccess" value="sameDomain" />
<param name="allowFullScreen" value="true" />
<!-- IE 等瀏覽器會使用上述參數 -->
<embed src="media/animation.swf" type="application/x-shockwave-flash"
width="550" height="400" allowScriptAccess="sameDomain" allowFullScreen="true" />
<!-- 其他瀏覽器使用 embed 作為後備 -->
</object>
在這段程式中,〈object〉標籤部分提供給支援它的瀏覽器(例如 IE),內含的〈param〉設定 Flash 插件的權限(腳本存取和全螢幕允許與否)。接著嵌入了一個〈embed〉作為內容的替代載具,提供給當時只認識〈embed〉的瀏覽器(如早期 Firefox、Safari 等)。雙管齊下使得無論使用者採用何種瀏覽器,都有機會看到 Flash 動畫。在 HTML5 標準下,這種寫法技術上是可行但不算嚴謹的(嚴格來說重複了內容;不過 HTML5 已將〈embed〉納入標準,文件也仍能通過驗證)。這種結構反映了歷史遺緒:因標準與實作不一致而形成的妥協方案。
現代觀點下的 Flash 嵌入: 隨著安全性問題和行動裝置的不支援,Flash 技術已走向沒落。Adobe 官方在2020年底停止了 Flash Player 的更新,主要瀏覽器也紛紛終止對 Flash 外掛的執行支援。因此,即使我們按照上述方式編寫嵌入 Flash 的代碼,在現今大部分用戶的瀏覽器中也無法正常顯示——要嘛被攔截,要嘛要求額外啟用插件(多數人並未安裝)。從使用建議角度,現在已不建議使用〈object〉或〈embed〉來嵌入 Flash,因為用戶端已經無法順利運行這類內容。取而代之的是使用現代的替代技術(例如 CSS3/Canvas 動畫、SVG、或各種 JavaScript 動畫庫)來實現動態效果。如果不得不保留舊有 Flash 元件(例如企業內部系統尚未升級),可考慮提供直接的下載或引導使用者使用特定舊版瀏覽器的方式,但這已超出本文討論範圍。
小結: 在嵌入多媒體資源時,〈object〉與〈embed〉的選擇往往取決於當時的技術背景與使用環境。現在HTML5已提供了多數情境的專用解決方案,加上外掛技術的沒落,〈object〉與〈embed〉更多時候扮演的是兼容和備用的角色。然而,對於如 PDF 這類仍無更佳替代方案的資源,以及一些特殊格式(或企業內網應用的自訂插件),我們仍需運用這兩個標籤來完成嵌入。下一節我們將綜合這些考量,提供 HTML5 標準下對〈object〉與〈embed〉的使用建議。
HTML5 標準建議的使用情境
根據 HTML5 的規範與當前網頁技術生態,我們可以給出以下建議來指引何時使用〈object〉或〈embed〉:
優先使用專門元素: HTML5 新增了一系列語意明確的多媒體元素,能夠取代以往對〈object〉/〈embed〉的大部分需求。例如,嵌入圖片請使用〈img〉,嵌入影音請使用〈video〉或〈audio〉,嵌入另一個網頁內容請使用〈iframe〉。這些標籤的出現,使得〈object〉與〈embed〉更多地被保留用於那些沒有對應專門標籤的情況。
外掛內容與特殊媒體: 如果需要嵌入插件型內容或特殊媒體格式(如老式 Java Applet、小型遊戲的獨立插件介面等),〈object〉/〈embed〉仍是必需的。此時,優先考慮〈object〉,因為它符合標準且可提供替代內容。例如,在企業內部系統中嵌入一個專用檔案檢視器 ActiveX 控制,必須使用〈object〉的 classid 等屬性指定ActiveX組件(這屬於非常特定的案例)。〈embed〉可以用於相似的嵌入,但既然 HTML5 已將其納編,我們通常將〈embed〉視為一種簡化語法,而非取代〈object〉。實際上,W3C 的標準並未將〈embed〉設計成要替代〈object〉;兩者在 HTML5 中是並存且各有所長的。
提供後備與漸進增強: HTML5 提倡漸進增強與優雅降級的開發理念。如果決定嵌入外部內容,建議使用〈object〉並在其中提供合適的後備方案,確保即便內容無法載入,使用者也不致無所適從。舉例而言,嵌入 PDF 時包含一段"您的瀏覽器無法顯示,請點此下載"的文字;嵌入視訊時至少提示使用者嘗試更新瀏覽器或使用其他途徑觀看;嵌入插件時告知需要安裝對應外掛程式等。這些都是〈object〉才能優雅實現的。〈embed〉缺乏這種內建機制,因此若使用〈embed〉,開發者需要額外編寫腳本來檢測支援度並提示(增加了實作成本)。
簡單快速插入 vs. 標準完備實現: 當開發情境需要快速地插入某個外部內容,且可以確定絕大多數目標用戶環境都支援該內容,〈embed〉作為快捷方式是可接受的選擇。例如在某簡報頁面臨時插入一段背景音樂,使用 <embed src="bgm.mp3" type="audio/mpeg" loop="true" hidden="true"> 可能比設定〈audio〉還輕鬆(儘管不夠語義化,但效果上相似)。但若是長期維護的專案或公共網站,還是建議依循標準,更嚴謹地使用〈object〉或相應的專用標籤,以確保良好的可持續性與可擴充性。
瀏覽器支援與新技術: HTML5 Living Standard 仍然保留了〈object〉與〈embed〉的定義,這意味著未來它們仍會被支援。然而,新技術日新月異,我們應密切注意替代方案。例如,之前提到的 Flash 等內容,如今更好的做法是直接使用 HTML5 原生功能或第三方 JS 庫。又比如 PDF 的展示,很多時候可選擇以 PDF.js 這樣的純前端庫渲染成 Canvas,避開了對〈object〉/〈embed〉的依賴。在做技術選型時,可以將〈object〉/〈embed〉作為後盾,但優先考慮現代方案。
概括來說,HTML5 標準鼓勵根據內容類型使用最恰當的元素。〈object〉與〈embed〉扮演的是「萬用工具」與「快捷方案」的角色:前者萬用但需要細心配置,後者快捷但稍嫌原始。瞭解它們的差異能讓我們在需要時運用自如,同時也清楚何時該轉向更專門的工具。
常見問題與錯誤排除 (Q&A)
在使用〈object〉和〈embed〉的過程中,開發者常會遇到一些困惑或問題。以下以問答形式整理幾個常見問題,並提供解答來協助排除疑難:
Q1: 我應該使用〈object〉還是〈embed〉?它們哪個更好?
A1: 這取決於您的用途與需求。一般而言,如果您需要為外部內容提供後備方案、傳遞多項參數或考慮標準的完整性,建議使用〈object〉。它是較正式的方案,HTML5 標準中明確定義了〈object〉的各種屬性和行為。而〈embed〉適合在確定環境支援的前提下快速插入內容,或者用在〈object〉裡作為兼容輔助。現在大部分情況下兩者在現代瀏覽器都能運作,但為了長期可維護性和無障礙體驗,〈object〉通常是首選。只有在需要極簡實現或特殊原因(例如某些舊代碼片段要求)時,才會單獨使用〈embed〉。
Q2: 為什麼有些舊的程式碼同時使用〈object〉和〈embed〉嵌入同一內容?
A2: 這是歷史相容性的產物。過去不同瀏覽器對這兩個標籤的支援不一:例如早年的 IE 只認得〈object〉(尤其是 ActiveX 控制透過〈object〉的 classid 載入),而 Firefox 等則偏好〈embed〉。因此開發者為了讓內容「一稿多吃」,就會在 HTML 中嵌套兩者——〈object〉外殼提供給IE用,殼裡再放一個〈embed〉給其他瀏覽器用。這樣無論用戶使用哪種瀏覽器,都至少有一層標籤能發揮作用。如今 HTML5 已包含〈embed〉,而且IE也成為歷史,這種寫法已不再必要,但在維護舊專案時您可能還會見到。遇到這種結構,理解其用意在於兼容舊環境即可,沒有特殊需要無須在新代碼中沿用此慣例。
Q3: 我用〈object〉嵌入內容,但什麼都沒顯示,只看到一個空白區域/圖示,怎麼辦?
A3: 這種情況可能由多種原因導致:首先,請確認您提供的 data 屬性 URL 正確無誤且可被存取(路徑錯誤或檔案不存在會導致空白)。其次,檢查 type 屬性是否對應正確的 MIME 類型,不匹配的話瀏覽器可能拒絕載入(尤其在使用 typemustmatch 時更需一致)。第三,確認用戶端環境是否具備相應的支援:例如嵌入 PDF 但瀏覽器沒有 PDF 查看能力、嵌入影音但瀏覽器不支援該格式、嵌入需插件的內容但使用者未安裝插件等等,都會導致〈object〉區塊空白無內容。最後,留意您的〈object〉標籤內是否提供了後備內容。若沒有,當載入失敗時就真的會是空白一片。如果有提供,卻仍未顯示,可能是瀏覽器仍在嘗試載入(例如檔案很大導致暫時空白)或者後備內容本身有問題。建議您可以打開瀏覽器的開發者工具,查看 Console 或 Network 訊息,有無報錯或載入失敗的資源,從而對症調整。
Q4: 為什麼我的〈embed〉標籤沒有任何反應?
A4: 若〈embed〉沒有顯示內容或反應,可能原因包括:1)目標資源不支援或未載入(類似於 Q3 提到的檔案路徑/格式問題);2)瀏覽器確實載入了內容但沒有可視化界面——這在音訊/隱藏型內容很常見,例如〈embed〉播放音樂時如果未提供控制列,您可能看不到任何東西但實際上音樂可能正在背景播放;3)內容被瀏覽器攔截或禁用,典型案例是 Flash 等插件內容,現代瀏覽器會默拒絕執行,需要使用者手動允許。面對〈embed〉的問題,調試時也可參考 A3 提及的方法。此外,請注意〈embed〉本身不支援後備內容,所以當它不起作用時,您需要採取其他手段提示使用者,例如利用 JavaScript 檢查 navigator.plugins 或功能偵測,然後以 alert 或 DOM 插入文字的方式告知問題。總之,〈embed〉的診斷往往比〈object〉麻煩一些,因為它少了一層結構包裹,出了問題只能從外部想辦法探知。
Q5: 〈object〉和〈embed〉現在還有必要學習與使用嗎?
A5: 儘管在HTML5時代,我們有更多先進的工具,〈object〉與〈embed〉並非每天都會用到,但了解它們依然很重要。很多舊版網頁和系統仍使用這兩者嵌入內容,如果您要接手維護,懂得其中機制才能有效Debug和改進。另外,有些特殊應用(例如電子書閱讀器嵌入PDF、線上簡報嵌入第三方內容)還是會運用〈object〉或〈embed〉來達成需求。學習它們的差異與用法,不僅是對網頁兼容性歷史的一種瞭解,更能幫助您在需要突破常規限制時找到解決方案。總的來說,這兩個標籤屬於Web開發知識體系裡的「底層工具」,平常可能深藏不露,但合適的場合下就能派上用場。
實作範例代碼
最後,讓我們通過幾組可實際運行的HTML範例,來進一步鞏固〈object〉與〈embed〉的用法和差異。您可以直接將這些代碼片段複製到本地 HTML 檔案中進行嘗試(請確保替換其中的資源路徑為您本地可用的檔案),以觀察它們在瀏覽器中的表現。
範例一:使用〈object〉嵌入 PDF(含後備內容)
<!DOCTYPE html>
<html lang="zh-TW">
<head>
<meta charset="UTF-8" />
<title>Object Embed PDF Example</title>
</head>
<body>
<!-- 使用 object 內嵌 PDF,並提供後備下載連結 -->
<object data="files/example.pdf" type="application/pdf" width="800" height="600">
<p>本裝置不支援內嵌 PDF,請<a href="files/example.pdf">點擊此處下載檔案</a>。</p>
</object>
</body>
</html>
說明: 這段程式將 example.pdf 顯示在800x600大小的區域中。若瀏覽器不支援,則顯示段落提供下載鏈結。請注意 type="application/pdf" 的設定,能幫助瀏覽器調用正確的插件或內建功能來處理 PDF。這是推薦的用法,確保使用者不致因缺少插件而無所適從。
範例二:使用〈object〉嵌入影片檔案
<!DOCTYPE html>
<html lang="zh-TW">
<head>
<meta charset="UTF-8" />
<title>Object Embed Video Example</title>
</head>
<body>
<!-- 使用 object 內嵌 MP4 視訊,並透過 param 設定自動播放與控制項 -->
<object data="media/sample.mp4" type="video/mp4" width="640" height="360">
<param name="autoplay" value="false" />
<param name="controls" value="true" />
您的瀏覽器無法播放此影片,請嘗試更新瀏覽器或下載影片觀看。
</object>
</body>
</html>
說明: 此範例以〈object〉載入一個 MP4 格式的影片。使用了兩個〈param〉:autoplay 設為 false 表示不自動播放(使用者可自行啟動),controls 設為 true 表示顯示播放控制介面。多數現代瀏覽器對 video/mp4 都有原生支援,因此會直接呈現影片畫面和播放按鈕。如果碰巧瀏覽器不支援(例如非常老的版本),則〈object〉內的文字將提示使用者。雖然我們現在通常用〈video〉標籤來實現相同需求,但本例展示了在沒有〈video〉的環境下,〈object〉可以做類似的事情。
範例三:使用〈object〉搭配〈embed〉嵌入 Flash(跨瀏覽器相容)
<!DOCTYPE html>
<html lang="zh-TW">
<head>
<meta charset="UTF-8" />
<title>Object+Embed Flash Example</title>
</head>
<body>
<!-- 使用 object 及內嵌的 embed 來插入 Flash 動畫 -->
<object data="flash/game.swf" type="application/x-shockwave-flash" width="550" height="400">
<param name="wmode" value="transparent" />
<param name="allowFullScreen" value="true" />
<embed src="flash/game.swf" type="application/x-shockwave-flash" width="550" height="400"
wmode="transparent" allowFullScreen="true" />
無法載入 Flash 內容。請確認您已安裝 Flash Player 外掛並允許瀏覽器執行。
</object>
</body>
</html>
說明: 這段代碼演示傳統的 Flash 插入方法:〈object〉外殼中包含了〈param〉設定(例如 wmode、allowFullScreen 控制窗口模式和是否允許全螢幕),以及一個〈embed〉作為內嵌內容載入同一個SWF。這樣在不同瀏覽器下都能嘗試載入 Flash 動畫。最後提供了一段純文字作為最終後備,當所有方法都失敗時提示使用者安裝或啟用Flash。儘管現代瀏覽器大多不再支援 Flash,此範例仍具有學習價值——它讓我們看到為了兼容性必須同時使用兩種標籤的情形,以及如何在程式中安排它們各司其職。
透過以上實作範例,相信您對〈object〉與〈embed〉的用法有了更直觀的認識。在實際開發中,請根據內容類型與使用者環境選擇適當的方案。無論是靈活度更高的〈object〉,還是簡便直接的〈embed〉,都只是工具;最終目的是為了提供最佳的用戶體驗和功能實現。希望這篇深入教學能讓您掌握這兩個標籤的精髓,在遇到相關需求時運用自如、游刃有餘。祝您在前端開發的旅程中織構出精彩的網頁內容!