Ruffle 是一個開源免費的 Flash 播放器,網(wǎng)頁版 ruffle.js 體積很小,打個包 1.7 MB,調(diào)用也非常簡單。aardio 標(biāo)準(zhǔn)庫中的 web.view ( WebView2 ) 可以完美支持 ruffle.js ,不過我們先要解決 2 個小問題:
1、ruffle.js 通過網(wǎng)址加載 Flash 動畫不太正常會報錯,但是直接內(nèi)存加載動畫數(shù)據(jù)沒問題。
2、瀏覽器不能直接用代碼訪問本地文件。
我們先使用 external 接口導(dǎo)出 aardio 函數(shù)來解決上面的問題,使用 aardio 將遠程或本地的 swf 文件先讀入到內(nèi)存,再轉(zhuǎn)換為字節(jié)數(shù)組傳給 ruffle.js 就可以了,關(guān)鍵代碼如下:
import web.view;
var wb=web.view(winform);
wb.external={
getSwf=function(){
//可返回包含 SWF 文件二進制數(shù)據(jù)的數(shù)組、SAFEARRAY,buffer
return com.SafeArrayV( inet.http.get("https://update.aardio.com/v10.files/demo/transparent.swf") );
//本地文件可以直接返回 buffer
return string.loadBuffer("\res\tet.swf");
};
}
給 ruffle.js 返回數(shù)組就行(buffer、數(shù)組、COM 數(shù)組都行), 要注意 string.load 加載文件返回的是字符串,string.loadBuffer() 返回的是字節(jié)數(shù)組。
網(wǎng)頁里面用下面的 JavaScript 加載 Flash 動畫:
const ruffle=window.RufflePlayer.newest();
const player=ruffle.createPlayer();
player.style.width="100vw";
player.style.height="100vh";
const container=document.getElementById("container");
container.appendChild(player);
player.load({data: await aardio.getSwf() });
在 JS 里用 aardio.getSwf() 調(diào)用 aardio 導(dǎo)出的 wb.external.getSwf() 函數(shù),注意所有本地函數(shù)在 WebView2 里都是異步函數(shù),所以用了 await 取返回值( 要在異步函數(shù)里才能使用 await )。
ruffle.js 最好是通過 HTTP 服務(wù)器加載,這在 aardio 中很容易解決,如果創(chuàng)建了 aardio 工程,只要簡單地將所有網(wǎng)頁以及 ruffle.js 添加到工程的資源目錄內(nèi),然后用類似:
wb.go( wsock.tcp.simpleHttpServer.startUrl("/res/swf/index.html") )
打開網(wǎng)頁就可以了,aardio 會自動使用 HTTP 協(xié)議內(nèi)存加載這個資源目錄下的所有文件(可以發(fā)布為獨立 EXE 文件)。
寫范例的時候為了方便大家復(fù)制就可以運行,沒有創(chuàng)建工程文件,HTML代碼與 aardio 代碼混寫在一起,所以我寫了一個擴展庫 web.ruffle 用于獲取通過 HTTP 服務(wù)器訪問 ruffle.js 的地址。
首先在 aardio 中導(dǎo)出 getRuffleScriptSrc 函數(shù):
import web.ruffle;
import web.view;
var wb=web.view(winform);
wb.external={
getSwf=function(){
return com.SafeArrayV( inet.http.get("https://update.aardio.com/v10.files/demo/transparent.swf") );
};
getRuffleScriptSrc=function(){
return web.ruffle.getUrl("/ruffle/ruffle.js");
};
}
然后在 HTML 代碼中添加一個空的 script 元素:
<script id="ruffle"></script>
然后在 JavaScript 中調(diào)用 aardio 函數(shù)獲取到 ruffle.js 的地址并加載該 JS:
var ruffleScript=document.getElementById("ruffle");
ruffleScript.src=await aardio.getRuffleScriptSrc();
完整范例源碼請參考 「 aardio 范例 / Web 界面 / web.view / Flash 」
aardio 擴展庫 process.ruffle —— 可以讓 Ruffle 桌面版的窗口嵌入我們的軟件界面。這個庫之前的實現(xiàn)是把 Ruffle 創(chuàng)建的桌面獨立窗口加上 WS_CHILD 樣式變?yōu)樽哟翱冢僦付ǜ复翱冢{(diào)整大小后嵌入我們的界面。但是這種方式 —— 有時候會出現(xiàn)一些奇怪的問題( 例如 Flash 動畫卡住,鼠標(biāo)晃一下才會動 )。
在 aardio 里還有一個更好的選擇:我們可以用 orphanWindow 功能將獨立窗口偽裝為子窗口,關(guān)鍵代碼只有一句:
this._form.orphanWindow(,this.hwndFlash);
Ruffle 桌面版打開 Flash 會創(chuàng)建一個帶標(biāo)題欄,帶邊框的獨立窗口,如果在打開 Flash 動畫以后再去移除窗口邊框 —— 那就會看到帶邊框的窗口在屏幕上一閃而過。下面我們就來解決這個問題。
首先我們用 process.apiHook 替代 process 創(chuàng)建 Ruffle 進程:
this.apiHook=process.apiHook(ruffleExePath,args,{
suspended=true;//啟動后暫停
});
注意參數(shù)里指定了進程啟動后暫停,下面安裝好 API 鉤子以后再恢復(fù)運行。
下面先安裝鉤子攔截創(chuàng)建窗口的 API 函數(shù) CreateWindowExW ,以及設(shè)置窗口位置的函數(shù) SetWindowPos 。關(guān)鍵代碼如下:
//安裝 HOOK
this.hookCreateWindowEx=this.apiHook.install("User32.dll"
,"CreateWindowExW","CreateWindowExHook.dll","_CreateWindowExHook@48");
this.hookSetWindowPos=this.apiHook.install("User32.dll"
,"SetWindowPos","CreateWindowExHook.dll","_hookSetWindowPos@28");
然后再獲取外部進程的 hookSet 函數(shù)并轉(zhuǎn)換為 aardio 函數(shù)調(diào)用:
var hookSet=this.process.remoteApi("void(addr pc,addr ps,addr hwndHost)"
,"CreateWindowExHook.dll","hookSet","cdecl");
hookSet(
this.hookCreateWindowEx.addrTrampoline,//這是原來的 CreateWindowEx 函數(shù)指針地址
this.hookSetWindowPos.addrTrampoline,//這是原來的 SetWindowPos 函數(shù)指針地址
this._form.hwnd
);
現(xiàn)在可以用下面的代碼讓進程繼續(xù)運行了:
this.process.resume();
再加上下面的代碼保證主進程退出時 ruffle.exe 也會自動退出:
this.process.assignToJobObject(..process.job.limitKill);
DLL 的源代碼很少,在 process.ruffle 擴展庫目錄下可以找到。要注意 Ruffle 創(chuàng)建了多個窗口,設(shè)置參數(shù)要避免改動不可見的那個窗口。
測試一下:
調(diào)用范例:
import win.ui;
/*DSG{{*/
var winform=win.form(text="開源 Flash 控件 Ruffle";right=759;bottom=512)
winform.add(
static={cls="static";text="Static";left=3;top=1;right=758;bottom=443;db=1;dl=1;dr=1;dt=1;z=1}
)
/*}}*/
import process.ruffle;
var ruffle=process.ruffle(winform.static);
winform.show();
//自定義 Flash 參數(shù)
ruffle.flashVars={k="v",k2=123};
//也可以打開本地文件
ruffle.go("https://ruffle.rs/demo/swfs/wasted_sky.swf");
win.loopMessage();
請注意 Ruffle 桌面版不支持 Win7。
<div>元素是個有故事的元素,這個元素很早就出現(xiàn)在html超文本標(biāo)記語言中,它設(shè)計之初就是為了解決網(wǎng)頁頁面布局的需求。但是遺憾的是它出生后一直懷才不遇。
在我還上初中的時候,智能手機還沒有出現(xiàn),更沒有平板電腦等移動設(shè)備。上網(wǎng)是通過擺在桌子上的計算機來完成的。
那時,大街小巷上有好多網(wǎng)吧。
那時,馬云剛剛辭去工作準(zhǔn)備創(chuàng)業(yè)。
那時,發(fā)送郵件的操作都會出現(xiàn)在計算機課程中。
那時,對頁面還沒有現(xiàn)在的跨平臺要求。
那時,flashplayer大行其道。
那時,dreamwaver、flash、fireworks被稱為網(wǎng)頁三劍客!
那時,制作網(wǎng)頁可以不用懂的html的寫法!
第一次接觸網(wǎng)頁制作是在大學(xué)的專業(yè)課上,使用三劍客,通過點擊軟件菜單中的按鈕就能制作網(wǎng)頁,精力都放在了如何使用flash制作酷炫的交互動畫上了。
那時,對html還沒有深刻的認(rèn)識,但是卻對<table></table>這個標(biāo)簽有著極深的印象。
因為當(dāng)時的dreamwaver通過非代碼方式生成的頁面都是使用<table>表格元素進行布局的!
也就是說,在移動智能設(shè)備誕生之前,在用戶對頁面還沒有可以適應(yīng)不同屏幕比例的要求前,<table>這個本來用來做表格的元素同時兼職了<div>的頁面布局工作,而且把兼職干成了主業(yè),讓<div>這個專業(yè)的塊元素閑置了好久。
直到智能手機,平板電腦產(chǎn)生后,由于對頁面的跨平臺顯示的要求的出現(xiàn)(這類適應(yīng)多平臺的頁面布局叫做響應(yīng)式布局),<table>表格制作的頁面在響應(yīng)式布局大行其道的今天,用它布局的頁面開始出現(xiàn)代碼冗余,維護困難等諸多問題。手機端的瀏覽器在播放視頻或其他交互動畫時也不再依賴flashplayer這個給我們帶來無數(shù)反感和惱火的插件。
從此,頁面制作的世道變了,從不需要編程就能制作頁面的三劍客,變成了必須懂得相關(guān)代碼寫法才能使用的HTML+CSS+JavaScript了。dreamwaverCC版本也恢復(fù)了寫代碼做頁面的操作方式,過去的點擊加拖拽的制作方式也消失了。這讓很多不懂編程和HTML等頁面制作核心技術(shù)的從業(yè)人感到難受。
dreamwaver的老東家Adobe后來也嘗試過推出新模式下通過界面操作來制作網(wǎng)頁的軟件,還搞出一個叫做Muse的軟件,但是依舊沒能撬動代碼書寫的方式。
這個故事在開始學(xué)習(xí)<div>和css布局之前我都會講給學(xué)生(一群文科生)聽,我只是想告訴大家,學(xué)習(xí)任何計算機技術(shù),我們可以從簡單易學(xué)的方式入手,但要有透過這種方式向下挖掘核心知識的決心和勇氣!對于自己從事的工作我們不能滿足于會做,還要盡量透析它的原理,這樣才能在技術(shù)換代中不會被輕易淘汰。
在我研究生階段,有一門讓我終生難忘的選修課,這門課叫做《數(shù)字娛樂技術(shù)概述》,這門課既不娛樂也不概述,但是通篇都是數(shù)字,那位年輕的教授為我們透析了游戲、影視特效的核心----計算機圖形學(xué)。
從此我開始學(xué)習(xí)數(shù)學(xué)。因為老師的一句話:從2000年到現(xiàn)在(2014)雖然各種軟件層出不窮,但是計算機圖形學(xué)的核心算法卻幾乎沒什么改變。
向下挖掘雖然很難,但是有必要!與各位共勉!
下面開始今天的內(nèi)容。
首先,我們將之前的"第一個頁面.html"文件復(fù)制一個,叫做"塊元素學(xué)習(xí).html"。然后把<body></body>中間的內(nèi)容清空。
如圖:
下面,我們在<body></body>中間添加<div></div>標(biāo)簽。示例代碼如下:
<body><div></div></body>
我們看看效果:
啦啦啦,什么都沒有!
為了讓大家可以看出來不同,我們?yōu)?lt;div>添加邊框?qū)傩裕?/p>
我們使用style屬性為<div>添加邊框,style屬性里的代碼就是以后在CSS中使用的代碼!實際上我們已經(jīng)開始接觸CSS的一些內(nèi)容了。具體寫法的講解大家可以看這個教程,這里不再贅述。
示例代碼如下:(通過style="border-style: solid;"可以為很多元素添加邊框,就不需要大家記憶或查詢不同元素的不同寫法,是不是很方便!)
<div style="border-style: solid;">
效果如圖:
因為里面沒有內(nèi)容,所以<div>的寬度是0,因此顯示的就是一條直線。下面我們向<div>中添加內(nèi)容。
為了看起來花哨些,加張圖片吧!
示例圖片
示例代碼如下:
<div style="border-style: solid;"><img src="img/示例圖片/image4.jpg"/ style="width:50%;"></div>
大家請按照<img>中的scr自行建立文件夾和命名吧!如果您看不懂請參照《HTML元素中的屬性2(路徑詳解)——零基礎(chǔ)自學(xué)網(wǎng)頁制作》
效果如下:
其中,我們也是使用了style的方式為<img>設(shè)置的寬度,這個設(shè)置方法在<div>中一樣使用!
代碼示例:大家注意寫法,不同的屬性都添加到style的雙引號中即可,同時使用;隔開!
<div style="border-style: solid; width:50%;">
<img src="img/示例圖片/image4.jpg"/ style="width:50%;">
</div>
效果如圖:
整個邊框縮小了50%,圖片更有趣,尺寸變成了div的50%乘以自身的50%。這個特性大家要記住。
為了方便觀看,我們?nèi)サ鬱iv的width設(shè)置。同時在<div>中繼續(xù)添加<div>標(biāo)簽。為了方便顯示,我們在新的<div>中添加一段文字!
示例代碼如下:
<div style="border-style: solid;">
<img src="img/示例圖片/image4.jpg"/ style="width:50%;">
<div>
<p>學(xué)習(xí)網(wǎng)頁制作非常有趣!</p>
</div>
</div>
效果如下:
如果為了美觀,我們讓文字到圖片右邊的空間中怎么做呢?
示例代碼如下:
<div style="float:right;"><p>學(xué)習(xí)網(wǎng)頁制作非常有趣!</p></div>
我們通過為新的<div>標(biāo)簽中的style屬性添加float(浮動)屬性,同時設(shè)置為right(右)。
頁面效果如圖:
大家思考一下如何讓圖片與文字都靠在左邊呢?
是不是為圖片style添加float:left;同時把新<div>的float改為left?
我們試試看!
示例代碼如下:
<div style="border-style: solid;">
<img src="img/示例圖片/image4.jpg" style="width:50%; float:left;"/>
<div style="float:left;">
<p>學(xué)習(xí)網(wǎng)頁制作非常有趣!</p>
</div>
</div>
頁面效果:
效果完全不對,圖片和文字跑到外邊來了。
這是div布局中經(jīng)常出現(xiàn)的一個問題!解決方案有點奇葩,既不是修改<img>屬性也不是修改<div>屬性,而是增加一組空的<div></div>標(biāo)簽!給這個新的空的<div>的style設(shè)置為"clear:both"即可修正。
示例代碼如下:
<div style="border-style: solid;">
<img src="img/示例圖片/image4.jpg" style="width:50%; float:left;"/>
<div style="float:left;">
<p>學(xué)習(xí)網(wǎng)頁制作非常有趣!</p>
</div>
<div style="clear:both;"></div>
</div>
頁面效果如下:
值得注意的是,如果您不使用<div>的話直接使用<img>和<p>,同時對兩個標(biāo)簽的style設(shè)置為float:left,是沒有問題的,只有把它們放到<div>中才會出現(xiàn)上面的情況。
代碼如下:
<body>
<img src="img/示例圖片/image4.jpg" style="width:50%; float:left;"/>
<p style="float:left;">學(xué)習(xí)網(wǎng)頁制作非常有趣!</p>
</body>
頁面顯示效果如下:
大家觀察一下,文字也變小了。至于為什么去掉<div>之后就不會出現(xiàn)上面那種出框的情況,而且文字也變小的問題在以后的講解中我們再深入探討!
現(xiàn)在希望大家可以記牢這個情況和操作,更多布局問題我們會在CSS的浮動(float)的講解中詳細說明。
疫情期間,請大家少出門,不聚會,沒事在家學(xué)學(xué)網(wǎng)頁制作,即抗擊疫情又提高自己!
喜歡的小伙伴請關(guān)注我,閱讀中遇到任何問題請給我留言,如有疏漏或錯誤歡迎大家斧正,不勝感激!
HTML序章(學(xué)習(xí)目的、對象、基本概念)——零基礎(chǔ)自學(xué)網(wǎng)頁制作
HTML是什么?——零基礎(chǔ)自學(xué)網(wǎng)頁制作
第一個HTML頁面如何寫?——零基礎(chǔ)自學(xué)網(wǎng)頁制作
HTML頁面中head標(biāo)簽有啥用?——零基礎(chǔ)自學(xué)網(wǎng)頁制作
初識meta標(biāo)簽與SEO——零基礎(chǔ)自學(xué)網(wǎng)頁制作
HTML中的元素使用方法1——零基礎(chǔ)自學(xué)網(wǎng)頁制作
HTML中的元素使用方法2——零基礎(chǔ)自學(xué)網(wǎng)頁制作
HTML元素中的屬性1——零基礎(chǔ)自學(xué)網(wǎng)頁制作
HTML元素中的屬性2(路徑詳解)——零基礎(chǔ)自學(xué)網(wǎng)頁制作
使用HTML添加表格1(基本元素)——零基礎(chǔ)自學(xué)網(wǎng)頁制作
使用HTML添加表格2(表格頭部與腳部)——零基礎(chǔ)自學(xué)網(wǎng)頁制作
使用HTML添加表格3(間距與顏色)——零基礎(chǔ)自學(xué)網(wǎng)頁制作
使用HTML添加表格4(行顏色與表格嵌套)——零基礎(chǔ)自學(xué)網(wǎng)頁制作
16進制顏色表示與RGB色彩模型——零基礎(chǔ)自學(xué)網(wǎng)頁制作
HTML中的塊級元素與內(nèi)聯(lián)元素——零基礎(chǔ)自學(xué)網(wǎng)頁制作
初識HTML中的<div>塊元素——零基礎(chǔ)自學(xué)網(wǎng)頁制作
在HTML頁面中嵌入其他頁面的方法——零基礎(chǔ)自學(xué)網(wǎng)頁制作
封閉在家學(xué)網(wǎng)頁制作!為頁面嵌入PDF文件——零基礎(chǔ)自學(xué)網(wǎng)頁制作
HTML表單元素初識1——零基礎(chǔ)自學(xué)網(wǎng)頁制作
HTML表單元素初識2——零基礎(chǔ)自學(xué)網(wǎng)頁制作
HTML表單3(下拉列表、多行文字輸入)——零基礎(chǔ)自學(xué)網(wǎng)頁制作
HTML表單4(form的action、method屬性)——零基礎(chǔ)自學(xué)網(wǎng)頁制作
HTML列表制作講解——零基礎(chǔ)自學(xué)網(wǎng)頁制作
為HTML頁面添加視頻、音頻的方法——零基礎(chǔ)自學(xué)網(wǎng)頁制作
音視頻格式轉(zhuǎn)換神器與html視頻元素加字幕——零基礎(chǔ)自學(xué)網(wǎng)頁制作
HTML中使用<a>標(biāo)簽實現(xiàn)文本內(nèi)鏈接——零基礎(chǔ)自學(xué)網(wǎng)頁制作
眾號【傳智播客博學(xué)谷】回復(fù)關(guān)鍵詞:前端 PS Java(100G) Python(80G) 大數(shù)據(jù) 區(qū)塊鏈 測試 PPT JS(40g+300教程) HTML 簡歷 領(lǐng)取相關(guān)學(xué)習(xí)資料!
一、HTML
1、<image>標(biāo)簽上title屬性與alt屬性的區(qū)別是什么?
alt屬性是為了給那些不能看到你文檔中圖像的瀏覽者提供文字說明的。且長度必須少于100個英文字符或者用戶必須保證替換文字盡可能的短。
這包括那些使用本來就不支持圖像顯示或者圖像顯示被關(guān)閉的瀏覽器的用戶,視覺障礙的用戶和使用屏幕閱讀器的用戶等。
title屬性為設(shè)置該屬性的元素提供建議性的信息。使用title屬性提供非本質(zhì)的額外信息。參考《alt和title屬性的區(qū)別及應(yīng)用》
2、分別寫出以下幾個HTML標(biāo)簽:文字加粗、下標(biāo)、居中、字體
加粗:<b>、<strong>
下標(biāo):<sub>
居中:<center>
字體:<font>、<basefont>、參考《HTML標(biāo)簽列表》
3、請寫出至少5個html5新增的標(biāo)簽,并說明其語義和應(yīng)用場景
section:定義文檔中的一個章節(jié)
nav:定義只包含導(dǎo)航鏈接的章節(jié)
header:定義頁面或章節(jié)的頭部。它經(jīng)常包含 logo、頁面標(biāo)題和導(dǎo)航性的目錄。
footer:定義頁面或章節(jié)的尾部。它經(jīng)常包含版權(quán)信息、法律信息鏈接和反饋建議用的地址。
aside:定義和頁面內(nèi)容關(guān)聯(lián)度較低的內(nèi)容——如果被刪除,剩下的內(nèi)容仍然很合理。
參考《HTML5 標(biāo)簽列表》
4、請說說你對標(biāo)簽語義化的理解?
a. 去掉或者丟失樣式的時候能夠讓頁面呈現(xiàn)出清晰的結(jié)構(gòu)
b. 有利于SEO:和搜索引擎建立良好溝通,有助于爬蟲抓取更多的有效信息:爬蟲依賴于標(biāo)簽來確定上下文和各個關(guān)鍵字的權(quán)重;
c. 方便其他設(shè)備解析(如屏幕閱讀器、盲人閱讀器、移動設(shè)備)以意義的方式來渲染網(wǎng)頁;
d. 便于團隊開發(fā)和維護,語義化更具可讀性,遵循W3C標(biāo)準(zhǔn)的團隊都遵循這個標(biāo)準(zhǔn),可以減少差異化。
5、Doctype作用? 嚴(yán)格模式與混雜模式如何區(qū)分?它們有何意義?
聲明位于文檔中的最前面,處于 標(biāo)簽之前。告知瀏覽器以何種模式來渲染文檔。
嚴(yán)格模式的排版和 JS 運作模式是,以該瀏覽器支持的最高標(biāo)準(zhǔn)運行。
在混雜模式中,頁面以寬松的向后兼容的方式顯示。模擬老式瀏覽器的行為以防止站點無法工作。
DOCTYPE不存在或格式不正確會導(dǎo)致文檔以混雜模式呈現(xiàn)。
6、你知道多少種Doctype文檔類型?
標(biāo)簽可聲明三種 DTD 類型,分別表示嚴(yán)格版本、過渡版本以及基于框架的 HTML 文檔。
HTML 4.01 規(guī)定了三種文檔類型:Strict、Transitional 以及 Frameset。
XHTML 1.0 規(guī)定了三種 XML 文檔類型:Strict、Transitional 以及 Frameset。
Standards (標(biāo)準(zhǔn))模式(也就是嚴(yán)格呈現(xiàn)模式)用于呈現(xiàn)遵循最新標(biāo)準(zhǔn)的網(wǎng)頁,
Quirks(包容)模式(也就是松散呈現(xiàn)模式或者兼容模式)用于呈現(xiàn)為傳統(tǒng)瀏覽器而設(shè)計的網(wǎng)頁。
7、HTML與XHTML——二者有什么區(qū)別
a. XHTML 元素必須被正確地嵌套。
b. XHTML 元素必須被關(guān)閉。
c. 標(biāo)簽名必須用小寫字母。
d. XHTML 文檔必須擁有根元素。
參考《XHTML 與 HTML 之間的差異》
8、html5有哪些新特性、移除了那些元素?
a. HTML5 現(xiàn)在已經(jīng)不是 SGML 的子集,主要是關(guān)于圖像,位置,存儲,多任務(wù)等功能的增加。
b. 拖拽釋放(Drag and drop) API
c. 語義化更好的內(nèi)容標(biāo)簽(header,nav,footer,aside,article,section)
d. 音頻、視頻API(audio,video)
e. 畫布(Canvas) API
f. 地理(Geolocation) API
g. 本地離線存儲 localStorage 長期存儲數(shù)據(jù),瀏覽器關(guān)閉后數(shù)據(jù)不丟失
h. sessionStorage 的數(shù)據(jù)在頁面會話結(jié)束時會被清除
i. 表單控件,calendar、date、time、email、url、search
j. 新的技術(shù)webworker, websocket等
移除的元素:
a. 純表現(xiàn)的元素:basefont,big,center, s,strike,tt,u;
b. 對可用性產(chǎn)生負面影響的元素:frame,frameset,noframes;
9、iframe的優(yōu)缺點?
優(yōu)點:
a. 解決加載緩慢的第三方內(nèi)容如圖標(biāo)和廣告等的加載問題
b. iframe無刷新文件上傳
c. iframe跨域通信
缺點:
a. iframe會阻塞主頁面的Onload事件
b. 無法被一些搜索引擎索引到
c. 頁面會增加服務(wù)器的http請求
d. 會產(chǎn)生很多頁面,不容易管理。
參考《iframe的一些記錄》
10、Quirks模式是什么?它和Standards模式有什么區(qū)別?
在寫程序時我們也會經(jīng)常遇到這樣的問題,如何保證原來的接口不變,又提供更強大的功能,尤其是新功能不兼容舊功能時。IE6以前的頁面大家都不會去寫DTD,所以IE6就假定 如果寫了DTD,就意味著這個頁面將采用對CSS支持更好的布局,而如果沒有,則采用兼容之前的布局方式。這就是Quirks模式(怪癖模式,詭異模式,怪異模式)。
區(qū)別:總體會有布局、樣式解析和腳本執(zhí)行三個方面的區(qū)別。
a. 盒模型:在W3C標(biāo)準(zhǔn)中,如果設(shè)置一個元素的寬度和高度,指的是元素內(nèi)容的寬度和高度,而在Quirks 模式下,IE的寬度和高度還包含了padding和border。
b. 設(shè)置行內(nèi)元素的高寬:在Standards模式下,給等行內(nèi)元素設(shè)置wdith和height都不會生效,而在quirks模式下,則會生效。
c. 設(shè)置百分比的高度:在standards模式下,一個元素的高度是由其包含的內(nèi)容來決定的,如果父元素沒有設(shè)置百分比的高度,子元素設(shè)置一個百分比的高度是無效的用
d. 設(shè)置水平居中:使用margin:0 auto在standards模式下可以使元素水平居中,但在quirks模式下卻會失效。
11、請闡述table的缺點
a. 太深的嵌套,比如table>tr>td>h3,會導(dǎo)致搜索引擎讀取困難,而且,最直接的損失就是大大增加了冗余代碼量。
b. 靈活性差,比如要將tr設(shè)置border等屬性,是不行的,得通過td
c. 代碼臃腫,當(dāng)在table中套用table的時候,閱讀代碼會顯得異常混亂
d. 混亂的colspan與rowspan,用來布局時,頻繁使用他們會造成整個文檔順序混亂。
e. 不夠語義
參考《為什么說table表格布局不好?》
12、簡述一下src與href的區(qū)別
src用于替換當(dāng)前元素;href用于在當(dāng)前文檔和引用資源之間確立聯(lián)系。
src是source的縮寫,指向外部資源的位置,指向的內(nèi)容將會嵌入到文檔中當(dāng)前標(biāo)簽所在位置
href是Hypertext Reference的縮寫,指向網(wǎng)絡(luò)資源所在位置,建立和當(dāng)前元素(錨點)或當(dāng)前文檔(鏈接)之間的鏈接
公眾號【傳智播客博學(xué)谷】回復(fù)關(guān)鍵詞:前端 PS Java Python 大數(shù)據(jù) 區(qū)塊鏈 測試 PPT JS HTML 簡歷 領(lǐng)取相關(guān)學(xué)習(xí)資料!
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。