inja 意為忍者,武功高強、精通忍術(shù),好似輕輕一片羽毛,能以四兩撥千斤,也可升天遁地,鴻毛般悄然潛入你的世界。Ninja 讀音可類比「您家」,像是告訴大家,我屬于你家。這是我對 Ninja 瀏覽器的印象:輕快好用,國內(nèi)高材生開發(fā),還不是從別人家拿過來的。
對比一下國內(nèi)幾個著名的手機瀏覽器,他們針對國內(nèi)市場所發(fā)布的產(chǎn)品,個個塊頭好似相撲,功能堆砌如山;爬上梯子探頭觀之,卻發(fā)現(xiàn)紅杏結(jié)在外,那些所謂「國際版」的瀏覽器應(yīng)用都走「小清新」路線,身材苗條,功能簡潔。問其所以然,答曰「國內(nèi)外用戶需求不同,走差異化路線」。如此看來,如果不拿別人家的「國際版」瀏覽器,我們似乎就只有羨慕的份。于是,Ninja 瀏覽器進(jìn)入了你家,像忍者一樣,滿足了你要輕裝上陣的需求。
少數(shù)派曾介紹過的 via 瀏覽器體積只有 0.19M,Ninja 瀏覽器稍大,但也只有 0.47M,不可不謂如忍者般輕巧。體積雖然打折,但瀏覽體驗依舊百分百。
Ninja 瀏覽器使用了 Android 系統(tǒng)中由 Chrome 提供支持的 Android System WebView 組件,這個組件提供了瀏覽器的內(nèi)核服務(wù),與電腦里各種第三方瀏覽器和 IE 內(nèi)核的關(guān)系類似。手機里,我們所熟知的 UC、QQ 等瀏覽器都自帶了「自主研發(fā)」的內(nèi)核,因此體積稍大,并且體驗確實略遜一籌。拿 Html5 為例,使用了 Android System WebView 組件 Ninja 瀏覽器,Html5 跑分高達(dá) 512,逼近東家 Chrome 的 518 分,超越同樣使用此組件的自帶互聯(lián)網(wǎng)應(yīng)用(479 分),甩開 UC 瀏覽器整 100 分。
雖說跑分不能代表一切,但也足以看出 Ninja 瀏覽器穩(wěn)定和完善的瀏覽體驗,而實際體驗中也確實沒有令人失望。應(yīng)用秒開,默認(rèn)頁面清爽,網(wǎng)址快捷鍵可完全自定義,不會強制駐留;查看地全景地圖絲毫不卡頓,點哪兒去哪;flash 游戲可以正常運行;網(wǎng)頁視頻可流暢播放,但在瀏覽部分網(wǎng)站中,視頻全屏不完整,網(wǎng)址欄不會隱藏。
要成為忍者,需要具備應(yīng)付各種場景的技能,而 Ninja 瀏覽器的個性化和手勢操作完全可以達(dá)到這個目的。
Ninja 瀏覽器中,我們可以改變地址欄的位置:頂部適合傳統(tǒng)瀏覽,躺在家里刷個新聞看個微博比較舒服;放在底部更適合出門在外,單手操作的時候手指更容易點按到地址欄,有 Windows Phone 情節(jié)的用戶還可以模擬一下手機上的 IE 瀏覽器。
Ninja 瀏覽器的另一特性是基于地址欄的手勢操作,在初次進(jìn)入 Ninja 瀏覽器的時候,應(yīng)用會彈出位于本地的引導(dǎo)頁面,告訴你這幾個簡單的手勢:上下拖動地址欄彈出標(biāo)簽頁和菜單欄(設(shè)置和書簽歷史的入口都在這里)、上下拖動標(biāo)簽縮略圖關(guān)閉此網(wǎng)頁、瀏覽中左右滑動地址欄用來切換標(biāo)簽,是不是非常簡單。值得注意的是,當(dāng)輸入法鍵盤處于激活狀態(tài)時,標(biāo)簽欄將被暫時禁用以防誤觸,大家不要以為這是應(yīng)用假死。
當(dāng)忍者修煉到高級階段時,就需絕對的忠誠和更強悍的技能。Ninja 瀏覽器的各種貼心和自由的設(shè)定功能可以讓這個「忍者」完全受你所控。
Ninja 瀏覽器在設(shè)置中可以控制是否允許網(wǎng)頁打開新標(biāo)簽,這個設(shè)定對那種不斷彈窗的流氓網(wǎng)頁非常有用;而渲染模式可以更改查看網(wǎng)頁的樣式,例如「灰度」模式可以用來做網(wǎng)頁的打印預(yù)覽、「反轉(zhuǎn)」模式可以幫助色覺障礙人群瀏覽。
貼心的功能遠(yuǎn)不止如此,Ninja 瀏覽器內(nèi)嵌了簡單的 AdBlock,可以自由的導(dǎo)出或倒入廣告規(guī)則;閱讀模式允許你調(diào)用「Readability」技術(shù),在「Readability」網(wǎng)站上獲取你的個人令牌后,Ninja 瀏覽器就可以為你提供更純凈的文字閱讀體驗;內(nèi)置網(wǎng)頁截圖功能,大多數(shù)網(wǎng)頁額可以來一個全身快照,分享小說和帖子非常方便。
而 Ninja 瀏覽器最吸引我的地方,是類似 Link Bubble 和 Flynx 的后臺加載網(wǎng)頁功能。將 Ninja 瀏覽器設(shè)為默認(rèn)后,單擊鏈接選擇它會在后臺加載,快速雙擊鏈接會彈出提示,你可以選擇直接彈出頁面或是復(fù)制地址和分享。Ninja 瀏覽器的開發(fā)者「認(rèn)為懸浮窗口是邪惡的」,所以他將網(wǎng)頁加載提示放到了通知欄中而非懸浮球,更加符合 Android 的設(shè)計規(guī)范,并且可以自定義通知的優(yōu)先級,將選擇權(quán)交還給用戶。更重要的是,免費,也沒有數(shù)量限制。
作為瀏覽器,它已經(jīng)滿足了我們想要的:輕快、方便、強大。讓我們不再羨慕別人家的瀏覽器,告訴他們,這個像忍者一般的 Ninja 瀏覽器是「我家」的。
言
Notification API 是 HTML5 新增的桌面通知 API,用于向用戶顯示通知信息。該通知是脫離瀏覽器的,即使用戶沒有停留在當(dāng)前標(biāo)簽頁,甚至最小化了瀏覽器,該通知信息也一樣會置頂顯示出來。
用戶權(quán)限
想要向用戶顯示通知消息,需要獲取用戶權(quán)限,而相同的域名只需要獲取一次權(quán)限。只有用戶允許的權(quán)限下,Notification 才能起到作用,避免某些網(wǎng)站的廣告濫用 Notification 或其它給用戶造成影響。那么如何知道用戶到底是允不允許的?
Notification.permission 該屬性用于表明當(dāng)前通知顯示的授權(quán)狀態(tài),可能的值包括:
if(Notification.permission === 'granted'){ console.log('用戶允許通知'); }else if(Notification.permission === 'denied'){ console.log('用戶拒絕通知'); }else{ console.log('用戶還沒選擇,去向用戶申請權(quán)限吧'); }
請求權(quán)限
當(dāng)用戶還沒選擇的時候,我們需要向用戶去請求權(quán)限。Notification 對象提供了 requestPermission() 方法請求用戶當(dāng)前來源的權(quán)限以顯示通知。
以前基于回調(diào)的語法已經(jīng)棄用(當(dāng)然在現(xiàn)在的瀏覽器中還是能用的),最新的規(guī)范已將此方法更新為基于 promise 的語法:
Notification.requestPermission().then(function(permission) { if(permission === 'granted'){ console.log('用戶允許通知'); }else if(permission === 'denied'){ console.log('用戶拒絕通知'); } });
推送通知
獲取用戶授權(quán)之后,就可以推送通知了。
var notification = new Notification(title, options)
參數(shù)如下:
還有一些其他的參數(shù),因為用不了或者沒什么用這里就沒必要說了。
var n = new Notification('狀態(tài)更新提醒',{ body: '你的朋友圈有3條新狀態(tài),快去查看吧', tag: 'linxin', icon: 'http://blog.gdfengshuo.com/images/avatar.jpg', requireInteraction: true })
通知消息的效果圖如下:
關(guān)閉通知
從上面的參數(shù)可以看出,并沒有一個參數(shù)用來配置顯示時長的。我想要它 3s 后自動關(guān)閉的話,這時可以調(diào)用 close() 方法來關(guān)閉通知。
var n = new Notification('狀態(tài)更新提醒',{ body: '你的朋友圈有3條新狀態(tài),快去查看吧' }) setTimeout(function() { n.close(); }, 3000);
事件
Notification 接口的 onclick屬性指定一個事件偵聽器來接收 click 事件。當(dāng)點擊通知窗口時會觸發(fā)相應(yīng)事件,比如打開一個網(wǎng)址,引導(dǎo)用戶回到自己的網(wǎng)站去。
var n = new Notification('狀態(tài)更新提醒',{ body: '你的朋友圈有3條新狀態(tài),快去查看吧', data: { url: 'http://blog.gdfengshuo.com' } }) n.onclick = function(){ window.open(n.data.url, '_blank'); // 打開網(wǎng)址 n.close(); // 并且關(guān)閉通知 }
應(yīng)用場景
前面說那么多,其實就是為了用。那么到底哪些地方可以用到呢?
現(xiàn)在網(wǎng)站的消息提醒,大多數(shù)都是在消息中心顯示個消息數(shù)量,然后發(fā)郵件告訴用戶,這流程完全沒有錯。不過像我這種用戶,覺得別人點個贊,收藏一下都要發(fā)個郵件提醒我,老是要去刪郵件(強迫癥),我是覺得挺煩的甚至關(guān)閉了郵件提醒。
當(dāng)然這里并不是說要用 Notification,畢竟它和郵件的功能完全不一樣。
我覺得比較適合的是新聞網(wǎng)站。用戶瀏覽新聞時,可以推送給用戶實時新聞。以騰訊體育為例,它就使用了 Notification API。在頁面中引入了一個 notification2017_v0118.js,有興趣可以看看別人是怎么成熟的使用的。
一進(jìn)入頁面,就獲取授權(quán),同時自己頁面有個浮動框提示你允許授權(quán)。如果允許之后,就開始給你推送通知了。不過它在關(guān)閉標(biāo)簽卡的時候,通知也會被關(guān)閉,那是因為監(jiān)聽了頁面 beforeunload 事件。
function addOnBeforeUnload(e) { FERD_NavNotice.notification.close(); } if(window.attachEvent){ window.attachEvent('onbeforeunload', addOnBeforeUnload); } else { window.addEventListener('beforeunload', addOnBeforeUnload, false); }
兼容
說到兼容,自然是倒下一大片,而且各瀏覽器的表現(xiàn)也會有點差異。移動端的幾乎全倒,PC端的還好大多都能支持,除了IE。所以使用前,需要先檢查一下瀏覽器是否支持 Notification。
,只要會往`<canvas>`里面畫一個長方形,就可以做出來這樣子的效果,畫比較多的正方形實現(xiàn)像素風(fēng)頭像生成器:
趕時間的客官可以直接去`正文開始`那里。
今天有個想法,整成手把手系列,就是假設(shè)客官是一個從來沒有接觸過網(wǎng)頁編輯、代碼、編程的新手。所以會說的比較詳細(xì),比較累贅,大神們笑笑點個贊就好了,哈哈。
我的想法(初心)是,將一個有興趣寫網(wǎng)頁,但是不知道從何開始的人,通過幾篇很小的實例,讓他產(chǎn)生興趣,跟出效果,形成自己動手去學(xué)習(xí)的動力,便是最好了。
所以,努力寫得通俗易懂,簡單直接,拋開別的因素,先實現(xiàn)出來再說,那時候?qū)W寫代碼的時候也是聽師傅說“先有后優(yōu)”,所以,粗糙點不管,能說明問題便好。
有客官對于我前面幾天碼的字,有反饋,有問題提出來,非常感謝有人搭理我。提出來的1,web字體設(shè)置的方法,2,響應(yīng)式布局,3,網(wǎng)頁上面音頻播放的多瀏覽器兼容問題,4,不知從何入手學(xué)習(xí)一個東西...我都在拿著小本記下來,閑暇時間趕緊去搜集一些比較好的方法,盡力去更新分享這些方面的一小點經(jīng)驗,還請各位客官多多搭理我呀。
這里先把昨天最后那個小坑給添一下,那個響應(yīng)式布局,是通過在CSS里面定義不同屏幕寬度時候使用不同的樣式,直接帖代碼出來吧:
@media screen and ( max-width: 1920px ) { div.content { height: 600px; width: 300px; float: left; padding-top: 97px; } div.sider { float: right; } body { width: 600.111111px; margin: 0 auto; } } @media screen and ( max-width: 720px ) { div { display: block; clear:both; height: auto; } div.content { display: block; height: auto; width: 100%; } div.sider { display: block; width: 100%; padding-bottom: 100px; } body { margin: 0; padding: 0; width: 100%; } }
在1920到720這么寬的時候,兩個div左右浮動,在小于720的時候,兩個div顯示模式改為塊級元素,寬度定義為100%,也就變成豎著排列了。就這樣子。
接下來,正文開始:
1, 只用一個文件:`t.html`就好了,忘掉那些什么最佳實踐,干就完了,新建文本文件,然后重命名成`t.html`,注意,重命名成網(wǎng)頁之后,文件的圖標(biāo)會發(fā)生變化,不是以前文本文檔時候的樣子,如果圖標(biāo)沒變,你極可能重命名成了`t.html.txt`這樣子的,我的小視頻里面有如何設(shè)置windows7顯示擴展名,看看也是極好的。
2, 很簡單的網(wǎng)頁基本代碼:
<!doctype html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>像素風(fēng)頭像生成器</title> </head> <body> <div id="wrapper"> <!--第一個注釋,這里等下放畫板(canvas標(biāo)簽)--> </div> <!--第二個注釋,這里等下放javascript代碼--> </body> </html>
復(fù)制上面的代碼到`t.html`里面,然后保存,存成utf-8編碼格式(實例001里面有個圖片演示了怎么保存)。
3, 繼續(xù)編輯`t.html`文件,在兩個注釋的地方,第一個放入`<canvas>`標(biāo)簽,同時給它樣式,定義大小(寬500,高400),還有一個邊框(1像素實心線奶奶灰色),`<canvas>標(biāo)簽中間的一句話,在不支持canvas標(biāo)簽的瀏覽器里面會被顯示出來`:
<canvas id="myCanvas" width="500" height="400" style="border:1px solid #d3d3d3;"> 快看,這里有一個還在用IE6/8的老實人,大家快來~~ </canvas>
4, 第2步里面的第二個注釋的位置,加入javascript代碼,看代碼注釋理解語句的含義:
<script type="text/javascript"> //在html中用ID找到叫做`mycanvas`的畫布,給它取名叫c var c = document.getElementById("myCanvas"); //通過這個c(剛才找到的畫布),拿到一套可以畫2D圖片的基本工具, 取名叫ctx,可以理解成拿起一根畫筆 var ctx=c.getContext("2d"); //給ctx這根畫筆,蘸上橙色 ctx.fillStyle="orange"; //用ctx這根畫筆,在x=100,y=90這個坐標(biāo)位置,畫一個長80,寬40的長方形 ctx.fillRect(100,90,80,40); </script>
效果:
在畫布的左上角,坐標(biāo)為0,0
大小位置標(biāo)注:
嗯,就是這樣
是不是很簡單呀,在網(wǎng)上可以搜索`html5 canvas 基本開關(guān)`了解更多,不知客官可否通過這個別樣的“畫布”畫出來一個五角星呢?歡迎挑戰(zhàn)。
晚安
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。