成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Apple 中Safari 實戰 擴展開發

移動開發 iOS
本文介紹的是Apple 中Safari 實戰 擴展開發,并通過一個簡單的例子來完整介紹 Safari 擴展的開發 / 部署流程及相關技術細節,先來看內容。

本文將詳細介紹 Safari 5 中的這項新功能 , 并通過一個簡單的例子來完整介紹 Safari 擴展的開發 / 部署流程及相關技術細節。

Safari 擴展的相關背景介紹

當我們談到瀏覽器的擴展時 , 很容易被問到的問題是我們為什么要給瀏覽器寫擴展呢 ? 它能給我們帶來什么好處或者便利 ? Safari 的擴展和其他瀏覽器的擴展有什么異同 ? 下面 , 讓我們嘗試著回答這些問題。

目前 , 基于瀏覽器的應用越來越多,而我們每天黏在瀏覽器上的時間也越來越長,看新聞 , 泡 BBS, 搜索技術文檔 等等。對于這樣一個每天都要和它長時間打交道的東西,如何和它和睦相處無疑是很重要的。而如果能把它打造成完全符合你個人需求的,適合你個人使用習慣 , 為你度身定做的軟件,那將會使你的生活更美好些,讓你的工作也更有效率些。

那么,Safari 擴展具體能為我們提供哪些方面的便利呢 ? 請參考下面這幅圖 :

Apple 中Safari 實戰 擴展開發

從這副圖能夠看出 , 我們可以擴展 Safari 的如下幾個部分 :

1、我們能夠在工具條上添加自己所需要的按鈕

2、我們能夠添加自己所需要的擴展工具條

3、可以對頁面內容做混搭 (Mashup) 或自定義的修改

4、可以對指定內容添加上下文相關菜單

好吧 , 看上去覆蓋的功能面挺多 , 但還是不夠直觀 ? 讓我來針對每條分別舉一個直觀點的例子吧 :

1、我們可以在工具條上添加一個”GMail” 按鈕 , 可定時檢查新郵件并在圖標上顯示出新郵件的數量

2、可以添加一個新的工具條 , 滾動顯示當前的 Twitter 或者新浪微博里的信息 , 或者滾動顯示每日單詞 ( 我愛背單詞 )

3、對頁面做一些增值混搭 , 按自己的喜好重新排版網頁布局 , 或者自動過濾廣告

4、當用戶選定了頁面中的一些內容后 , 在右鍵的上下文菜單中添加一個”我要分享”選項 , 可以將所選的內容分享到其他 SNS ( 例如 : 開心 / 豆瓣等 )

是不是覺得有點意思了呢 ? 當然你也許已經有了更好的主意或是更有趣的點子 , 趕緊動手打造你自己的瀏覽器吧 !

Safari 擴展開發的準備工作

下面讓我們來看一下開發 Safari 擴展都需要做些什么準備工作吧。 首先 , 開發 Safari 擴展是免費的 , 這和開發 iPhone 應用不同。 在 iTunes 上發布 iPhone 應用需要參加 iPhone Developer Program ( 個人用戶每年 $99, 企業用戶為每年 $299)。 而開發 Safari 擴展只需要在 Apple 網站上免費注冊一個 Apple ID, 獲取到你自己的開發者證書就可以了 ( 我們在下面會詳細介紹這個步驟 )。 開發 Safari 擴展 , 也不需要你學習什么新的技術或是新的編程語言 , 只要你具有標準的 HTML/CSS/JavaScript 相關技術就可以了。 讓我們開始吧 !

啟用擴展功能

在 Safari 5 缺省狀態下擴展功能是關閉的 , 用戶需要手工開啟這項功能。 打開 Safari 菜單中的”編輯”, 再點擊”偏好設置”菜單選項 , 在”高級”這個選項頁中勾選底部的”在菜單中顯示開發菜單”選項 ( 圖二 )。

Apple 中Safari 實戰 擴展開發

然后就能從 Safari 的頂級菜單看到一個獨立的”開發”菜單項 ( 圖三 ), 從中選擇”啟用擴展”就大功告成了 !

Apple 中Safari 實戰 擴展開發

接下來同樣在”開發”菜單中選擇”顯示擴展創建器 (Show Extension Builder)”, 就能打開 Safari 為開發人員準備的擴展開發功能了 ( 圖四 ), 點擊左下角的”+”按鈕就能創建一個新擴展或是打開一個已存在的擴展項目 我們在第三部分中再來詳細介紹這部分的功能。

Apple 中Safari 實戰 擴展開發

讓我們回到 Safari 菜單中的”編輯”里的”偏好設置”菜單選項 , 這時我們就能在”高級”的選項頁旁邊看到新增的”擴展”選項頁了 ( 圖五 )。 由于現在尚未安裝任何擴展 , 所以當前列表是空的 , 讓我們在添加了擴展之后再回來看看發生了什么變化。

Apple 中Safari 實戰 擴展開發

注冊 Apple ID 并獲取 Safari 擴展開發的簽名證書

接下來的工作是 , 作為一個 Safari 擴展的開發者 , 你需要去 Apple 的網站上注冊一個免費的 Apple ID (http://developer.apple.com/programs/safari/), 此處步驟省略 , 請跟隨 Apple 注冊向導逐步完成即可 . 接著使用這個 Apple ID 登錄 Safari 開發者網站 , 創建一個開發中要使用的簽名證書 (https://developer.apple.com/safari/certificates /index.action), 選擇左邊標簽頁的第二個標簽 (Request Certificates)

Apple 中Safari 實戰 擴展開發

需要注意的是 , 在 Windows 和 Mac 上面的申請證書步驟略有不同,本文中將以 Mac 環境為例 , Windows 環境中的步驟請跟隨網站上的申請向導逐步完成即可。

在所用的開發機上安裝簽名證書

同樣需要注意的是 , 在 Windows 和 Mac 上的簽名證書步驟也略有不同。 在 Windows 環境下直接點擊生成的證書文件 , 系統即可自動安裝好此證書。 而 Mac 環境下簽名證書的步驟是個向導過程 , 本文寫作時 , 在選擇證書安裝分類時 , 在 Mac 下應選擇”登錄”而不是”系統”分類。 而在 Windows 環境下有時候 Safari 不能正常識別出安裝好的簽名證書 , 請參看官方網站的相關指引做相應的修改。

Apple 中Safari 實戰 擴展開發 

Apple 中Safari 實戰 擴展開發

如何制作 Safari 擴展

好了 , 通過上面兩部分的介紹 , 相信您已經對 Safari 擴展有了個大致的了解 , 也為此準備好了開發環境。 在動手編寫第一個擴展前 , 讓我們先來了解一下 Safari 擴展的框架結構及相應開發工具吧。

Safari 擴展框架結構

我們知道 , 在 Safari 擴展中 , 我們可以如下幾個部分來提供擴展功能 :

工具欄按鈕

擴展工具條

上下文關聯菜單

注入 (JavaScript) 腳本

注入樣式表單

而 Safari 擴展框架中其實是存在了一條分割線 , 將整個體系結構分為了兩個部分 :

Safari 應用層 : 包含工具條按鈕 , 擴展工具條 , 頁面標簽 , 頁面窗口 , 上下文菜單等

頁面內容層 : 包含修改頁面內容的 JavaScript 和 CSS

而這兩部分不能直接調用對方的代碼 , 需要通過給對方發送消息 , 再由對方的消息處理方法來調用所需的代碼。 當然 , 不是每一個 Safari 擴展都需要做這樣的消息調用 , 例如簡單的”關閉網頁”按鈕擴展就不需要和頁面內容層交互 , 也就不需要消息調用及代理等處理邏輯了。

Safari 擴展開發工具介紹

接下來我們來看一下 Apple 為我們提供的開發工具 , 不是 XCode 這樣的大家伙 , 也不是讓你從零開始完全手工編寫所有的代碼文件 , 部署腳本和打包程序。 Apple 在 Safari 5 里內嵌了一個叫做”擴展創建器”的工具來簡化開發 / 打包及部署步驟。 打開 Safari, 選擇”開發”菜單 , 再選擇”顯示擴展創建器”就能看到它了。

讓我們拿本文中下面即將提供的”CloseOtherTabs”這個示例來分析一下擴展創建器里面的內容 :

Apple 中Safari 實戰 擴展開發

前面的三部分比較簡單,分別是

1) 擴展信息 : 包括此擴展的顯示名稱 , 作者 , 描述等

2) 擴展詳細信息 : 包含此擴展的唯一標識以及將來檢查升級時所需的清單文件

3) 擴展版本。

Apple 中Safari 實戰 擴展開發

4) “擴展網站訪問”是用來控制此擴展可訪問哪些網址 , 可選的訪問級別有”無”, “部分”及”全部”三種 , 分別對應對所有網址均無權限 , 對指定的部分網址 ( 支持通配符 ) 具有權限 , 和對所有網址都有權限。

5) “擴展全局頁面” 這個頁面文件比較重要 , 全局頁面顧名思義是個掌控全局的頁面 , 但是它又比較特殊 , 位于 Safari 應用層而不是頁面內容層 , 而且此頁面不是用來顯示給終端用戶的。 如果你對 Safari 擴展中這兩個層還有所印象的話 , 應該記得這兩層是不能直接調用對方的 , 必須通過消息代理來間接調用。 那我們為什么要有這個全局頁面呢 ? 簡單的原因是這里面可以存儲一些公共的代碼從而避免多個代碼副本 , 而深一層的原因是將代碼放入全局頁面有利于提高用戶使用時的性能 ! 為什么會提升性能 ? 我們知道 , 在瀏覽器中我們可以開多個窗口 , 每個窗口又可以開多個標簽頁 , 每個標簽頁中才對應著你訪問的網站。 如果你將一些比較耗時的 JavaScript 代碼放入了工具條的擴展文件中 , 那么每開一個新窗口 , 這段代碼都要載入一次。 而如果你將耗時的 JavaScript 代碼放入了修改網頁內容的嵌入腳本中 , 那么每開一個標簽頁 , 這段代碼都會重新載入一次 , 無疑這將會極大的降低網頁載入速度。 而將這些 JavaScript 代碼放入全局頁面 , 那么它只會被載入一次 , 以后再開新窗口 / 新標簽頁 , 都無需重新載入。

6) “擴展 Chrome” 在這里你能夠創建你的工具欄 , 上下文關聯菜單 , 以及工具欄上的按鈕。 你可以隨時點擊”New Bar”或者”New Context Menu Item”來新增一個條目并填寫相應信息。

Apple 中Safari 實戰 擴展開發

7) “加入的擴展內容” 這里包含的就是對”頁面內容層”進行擴展的相應文件 (JavaScript/CSS) 了 , 我們可以在這里遍歷頁面的 DOM 樹 , 修改其中的內容 , 改變頁面的布局等等。

8) “擴展設置” 最后的這部分就是你想此擴展里使用的一些參數 , 方便用戶進行個性化自定義。

那么,這么多的設置,擴展創建器最終將它們保存在了什么地方 ? 讓我們看看這個”CloseOtherTabs”擴展的文件結構

Apple 中Safari 實戰 擴展開發

真的非常簡單 , 只有三個文件 :

1) global.html 包含當用戶點擊”關閉”按鈕時所需的 JavaScript 處理代碼

2) Info.plist 包含了上面擴展創建器中所有的參數設置

3) close.png 顯示在工具欄中的”關閉”圖標

實戰 Safari 擴展的開發 / 打包 / 安裝 / 發布

看到這里 , 也許你已經開始著急了 , 什么時候才開始開發我們的第一個 Safari 擴展啊 ! 別急 , 其實此時你已經具備了寫一個簡單 Safari 擴展所需的大部分知識。 讓我們動手實現它吧 !

首先 , 描述一下這個擴展所實現的功能 : 我們將提供一個位于工具欄中的”關閉其他”按鈕 , 用戶點擊了此按鈕后會關閉除當前頁面外的其他標簽頁。 當然 , Safari 瀏覽器其實已經提供了別的方式來完成這個功能 , 你可以按住”Alt”鍵 (Mac 上按”Option”鍵 ) 之后點擊當前標簽頁的”x”圖標也可關閉其他所有標簽頁。 在此 , 我們通過嘗試寫一個工具欄按鈕的 Safari 擴展來實現相同的功能從而達到練手的目的。

開發 CloseOtherTabs 擴展

首先是打開 Safari 中的擴展創建器 , 點擊左下角的”+”按鈕并選擇”新建擴展”, 然后在彈出的窗口中為新擴展選擇一個保存目錄。 在這里我們把它命名為”CloseOtherTabs”, 點擊保存。 你將會發現在上一步選擇的保存目錄中新創建了一個叫”CloseOtherTabs.safariextension”的文件夾 , 里面只包含有一個含有基本信息的 Info.plist 文件 , 這里先暫且把它放在一邊 , 等我們完成其他文件之后再來完善它。

接著是為這個擴展提供一個工具欄按鈕圖標 , 在此我們為它提供一個 11*11 像素的 png 文件 , 并將它保存在”CloseOtherTabs.safariextension”文件夾中。

最后 , 此擴展的重頭戲來了 , 我們需要為它寫一個全局頁面 ( 為什么是全局頁面而不是工具欄頁面的原因前面已說明 , 這樣可以減少不必要的反復加載從而提高性能 ), 并在里面實現所需的功能。 主要代碼如下 :

  1. // Register for the validate and command events.  
  2.  safari.application.addEventListener("command", performCommand, false);  
  3.  safari.application.addEventListener("validate", validateCommand, false);   
  4.  function performCommand(event)  
  5.  {  
  6.     if (event.command != "close-other-tabs")  
  7.         return;   
  8.     // return if there are no more tabs to close  
  9.     if (event.target.browserWindow.tabs.length < 2)  
  10.         return;   
  11.  
  12.     // Close others tab except the current one in the target's window.  
  13.     var myTabs = event.target.browserWindow.tabs;  
  14.     var currentTab = event.target.browserWindow.activeTab;   
  15.  
  16.     for (var i = 0; i < myTabs.length; ++i) {  
  17.         var tab = myTabs[i];   
  18.  
  19.         if (currentTab == tab){  
  20.             //do nothing for current tab  
  21.         }else{  
  22.             tab.close();  
  23.         }  
  24.     }  
  25.  }   
  26.  function validateCommand(event)  
  27.  {  
  28.     if (event.command !== "close-other-tabs")  
  29.         return;   
  30.  
  31.     // Disable the button if there are only 1 tab available.  
  32.     eventevent.target.disabled = event.target.browserWindow.tabs.length < 2;  
  33.  } 

小結:Apple Safari 實戰 擴展開發的內容介紹完了,希望本文對你有所幫助。

轉自 http://safarix.net/safari-extension-development-practice

責任編輯:zhaolei 來源: Cocoa China
相關推薦

2012-10-22 16:49:56

IBMdw

2009-06-12 14:31:59

Google WaveGoogle Wave

2011-01-21 15:29:16

Thunderbird

2024-03-11 10:19:30

Plasmo瀏覽器Web

2014-06-03 10:14:06

2017-08-23 08:50:00

Safari瀏覽器擴展

2009-04-24 09:11:21

AppleSafari瀏覽器

2009-05-15 09:07:12

Safari蘋果瀏覽器

2009-07-28 17:27:26

Sun網絡架構

2021-10-30 06:55:09

iPhone iOS蘋果

2016-09-21 12:34:10

Chrome瀏覽器插件

2010-03-15 09:04:27

2010-06-12 16:29:00

BlackBerry開

2021-07-15 07:25:57

蘋果 iOS 15 macOS Monte

2013-04-22 13:32:55

2022-07-04 09:21:16

GNOME Web瀏覽器

2022-11-07 15:40:22

數據轉碼應用應用開發

2016-11-22 17:31:16

Safari瀏覽器Mac

2021-06-05 07:51:11

ChromeSafariFirefox

2015-06-11 09:52:40

iOS 9蘋果WWDC
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品国产一区二区三区 | 久久999| 久久久国产亚洲精品 | 国产精品免费在线 | 久久精品国产v日韩v亚洲 | 狠狠综合久久av一区二区老牛 | 亚洲欧美中文字幕在线观看 | 欧美国产日韩在线观看 | 欧美日韩在线一区 | 欧美日韩中文字幕在线 | 欧美一区二区在线免费观看 | 日本免费在线 | 日韩精品在线免费 | 操操操日日日 | 欧美精品成人一区二区三区四区 | 精品日本久久久久久久久久 | 日韩伦理一区二区三区 | 国产精品黄色 | 亚洲欧美在线免费观看 | 成人av网页 | 亚洲第一天堂 | 狠狠亚洲| 久久一久久 | 欧美午夜视频 | 国产高清在线精品一区二区三区 | 99热.com | 国产丝袜一区二区三区免费视频 | 久久国产精99精产国高潮 | 九一精品 | 日韩电影一区二区三区 | 中文在线一区 | 精品一区二区三区在线视频 | 国产亚洲成av人片在线观看桃 | 中文字幕国产 | 精品久久香蕉国产线看观看亚洲 | 国产精品毛片av一区 | 亚洲一区二区av在线 | 亚洲免费一区 | 中文字幕在线国产 | 欧美精品在线免费观看 | 日韩一级在线 |