起源
任務本來是交給新來的同事做的,但由於新同事上手較慢,而功能卻著急上線使用,不得已就得親自動手了。
Task:將原有隻包含一級欄目的選單調整為支援三級級聯的選單
實作:滑鼠懸停在一級選單時,彈出二級下列選單,滑鼠停留在某二級選單時,彈出三級下拉選單,遺留程式碼如下:
<p id="main"> <iframe src='navbar.do' width=800 height=40></iframe> <iframe src='main_content.do'></iframe> </p>
遇到的問題:
原始功能使用iframe分別載入頁面的導航欄與內容區域,實現上本無可厚非(頻繁使用iframe實在不是最佳實踐),但新加的二三級欄位破壞了原有的頁面結構,由於導航列是固定高度的,下拉選單的加入,固定高度導致下拉選單的內容被包含它的iframe所遮擋。
效果圖:紅線是上下兩個iframe的分界線
第一直覺想到的方案是將導覽列的內容從iframe中出,放置於主頁中
<p id="main"> <p id="nav-bar"></p> <iframe src='main_content.do'></iframe> </p>
問題是解決了,感慨也有,那就是:
我們不缺碼農,缺少的是設計師,任何不經過思考的設計都是坑爹
再思考
回到這個問題,琢磨一下初始的設計,作者使用兩個請求分別載入導覽列和頁面主體內容區域,一般說來,首頁內容區域的業務邏輯是確定的,所以內容區域也用不著使用iframe來實現,合理的頁面佈局應該是下面的樣子
<p id="main"> <p id="nav-bar"></p> <p id="content"></p> </p>
#補充
測試火急火燎的跑來,著急的說道,又發現問題了,下拉菜單是可以看到了,但是content中顯示的視頻卻擋住了部分下拉菜單,效果如下圖:
效果圖
影片載入完畢後下拉選單中綠色部分會被影片覆蓋而顯示不完整,
描述實際的業務場景:影片是採購的第三方的服務,透過在頁面中動態載入第三方腳本動態產生embed標籤進而播放影片
為什麼
#給動態產生的embed元素設定z-index屬性是否可以呢?很失望,不奏效。
那是什麼原因呢?
之後發現了flash的渲染模式wmode參數,預設情況下wmode=window,主要是基於效率考慮,這就導致預設顯示方式下flash總是會遮住位置與他重合的所有html,設定wmode= Opaque可以解決此類問題,此時flash不會在高於瀏覽器html渲染表面,而是與其他元素一樣在同一個頁面上。具體資訊可以參考這裡.
接下來的工作就是找到由腳本動態產生的embed元素,並且為其設定wmode參數為Opaque,程式碼如下:
var timer = setInterval(function(){ var elem = document.getElementsByTagName("embed")[0]; if( elem ){ elem.setAttribute("wmode","opaque"); clearInterval(timer); } }, 100 );
#OK了嗎!
測試發現問題依舊,到底怎麼回事,為什麼沒起作用呢?
wmode用來設定flash的渲染模式,由於我們程式碼中embed元素是動態產生的,當我們找到embed元素並為其設定渲染模式時,此時flash已經渲染完成,再次設定其wmode是不會有效果的, 怎麼辦?
聯絡廠商解決,讓其腳本在生成embed元素是預設指定渲染模式為opaque,時效上應該會比較慢,況且廠商對於我們的建議是否採納也未可知。
既然embed元素是動態生成的,那我們自己是否也可以去做同樣的事情呢,在找到embed元素後,我們對embed元素進行修改,刪除flash廠商生成的embed元素,插入我們修改後的embed元素。
【相關推薦】
1. 免費css線上影片教學
2. css線上手冊
以上是詳解iframe製作三級級聯菜單的詳細內容。更多資訊請關注PHP中文網其他相關文章!

iframe加载慢的原因主要包括网络延迟、资源加载时间长、加载顺序、缓存机制以及安全策略等。详细介绍:1、网络延迟,当浏览器加载一个包含iframe的网页时,需要发送请求到服务器获取iframe中的内容,若网络延迟较高,那么获取内容的时间就会增加,从而导致iframe加载慢;2、资源加载时间长,资源的大小较大或者服务器响应时间较长时,加载速度会更加明显地变慢;3、加载顺序等等。

可以代替iframe的技术有Ajax、JavaScript库或框架、Web组件技术、前端路由和服务器端渲染等。详细介绍:1、Ajax是一种用于创建动态网页的技术。它可以通过在后台与服务器进行数据交换,实现页面的异步更新,而无需刷新整个页面,使用Ajax可以更加灵活地加载和显示内容,不再需要使用iframe来嵌入其他页面;2、JavaScript库或框架,如React等等。

当用户通过Safari浏览器访问电子邮件服务时,微软的Outlook正在macOS上下载一个名为“TokenFactoryIframe”的神秘文件。发现Outlook在每次访问时下载的“TokenFactoryIframe”文件的用户现已广泛报告此问题。Outlook每隔几秒或至少在每次访问Apple平台上的Outlook时都会下载此神秘文件。根据我们的调查结果,这似乎是由发布到Outlook的服务器端更新错误引起的问题,与Safari或macOS无关。微软在一份

Python中iframe是一种HTML标签,用于在网页中嵌入另一个网页或文档。在Python中,可以使用各种库和框架来处理和操作iframe,其中最常用的是BeautifulSoup库,可以轻松地从一个网页中提取出iframe的内容,并对其进行操作和处理。掌握如何处理和操作iframe对于Web开发和数据抓取都是非常有用的。

iframe嵌入播放器是一种在网页中嵌入视频播放器的技术。嵌入播放器的优点有:1、灵活性,通过使用iframe标签,可以将来自不同来源的视频媒体嵌入到同一个网页中;2、易用性,只需复制并粘贴嵌入代码,即可将播放器添加到网页中;3、可以通过设置参数来控制播放器的外观和行为;4、可以通过使用JavaScript来控制播放器的操作等等。

IE中的iframe是一种强大的工具,可以用于在网页中嵌入其他网页或文档,实现页面的分割和内容的展示。通过合理的使用和注意事项,可以充分发挥iframe的优势,提升网页的用户体验和功能性。

可以替代iframe的有Ajax请求、Web组件、框架和库、跨域通信、使用CSS布局和样式等。详细介绍:1、Ajax请求可以动态加载并显示其他网页或内容,而无需使用iframe,通过使用XMLHttpRequest对象或更现代的fetch API,可以实现异步加载内容,并将其插入到当前网页中的DOM树中,可以避免iframe的安全问题,并且可以更好地控制和操作加载的内容等等。

iframe禁用是指在网页中禁止使用iframe标签的功能。由于一些安全和隐私的考虑,有时候需要禁用iframe标签的使用,常见的禁用方法:1、通过设置X-Frame-Options响应头,表示不允许嵌入到任何iframe中;2、使用Content-Security-Policy,控制是否允许嵌入到iframe中;3、使用JavaScript禁用iframe标签等。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Linux新版
SublimeText3 Linux最新版

記事本++7.3.1
好用且免費的程式碼編輯器

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Dreamweaver CS6
視覺化網頁開發工具