🧊

Safari 9.0の新機能の概要

以下の機能がSafari 9.0から追加されるそうです。
ホヤホヤ情報なのとざーっくり訳なので、間違ってたらごめんなさい!

developer.apple.com

Secure Extension Distribution

OS XSafariの機能拡張が、すべてAppleでホストされるようになって(Safari Extensions Galleryっていうらしい)、より安全に使えるようになります。

Safari Extensions Galleryで公開された拡張は自動アップデートされて、
以下の2行を拡張のマニフェストに追加することでその恩恵が得られるとのこと。

<key>Update From Gallery</key>
<true/>

Safari Extensions Galleryに置かず、独自に拡張を公開することも引き続き可能だが、そっちは自動アップデート対象外。

ただし、Safari Extensions Galleryに作った拡張を再度アップロードする必要はあって、ココからやれよとのこと。

使ったことないのであんまりありがたみがないですねー。

Force Touch Trackpad Mouse Events

新しいマウスイベントでwebkitForceってのが増える。
トラックパッドの感圧タッチ系のイベント。

感圧タッチ?フォースタッチ?について詳細は以下リンクより。

Responding to Force Touch Events from JavaScript

  • event.webkitForce
  • webkitmouseforcewillbegin
  • webkitmouseforcedown
  • webkitmouseforceup
  • webkitmouseforcechanged
  • MouseEvent.WEBKIT_FORCE_AT_MOUSE_DOWN
  • MouseEvent.WEBKIT_FORCE_AT_FORCE_MOUSE_DOWN

これらを組み合わせて使うことで、トラックパッドのイベントを拾えるらしい。

ちなみに

さっきの参考リンク先に書いてあるコードを抜粋。

function getEventData(ev) {
  // そもそも対応してるかチェック
  if ('webkitForce' in ev) {
    // 比較用の押し具合たち
    var forceLevel      = ev['webkitForce'];
    var clickForce      = MouseEvent.WEBKIT_FORCE_AT_MOUSE_DOWN;
    var forceClickForce = MouseEvent.WEBKIT_FORCE_AT_FORCE_MOUSE_DOWN;

    if (forceLevel >= clickForce && forceLevel < forceClickForce)
      // 普通のクリック
    } else if (forceLevel >= forceClickForce) {
      // トラックパッドなクリック
    }
  }
}

うーん、使うのかコレは!

Content Blocking Safari Extensions

iOS

iOSSafariに、Content Blocking Safari Extensionsってのが追加されます。
以下のようなtrigger/actionの配列を書いたJSONを追加することで、柔軟にあれこれ不要なコンテンツをブロックできるとのこと。
Safariはこれをパースしてバイトコードとして効率的に使うので、ユーザーの邪魔にはならないと。

以下の例では、webkit.orgで画像をブロックするようにしてる。

[
    {
        "action": {
            "type": "block"
        },
        "trigger": {
            "url-filter": "webkit.org/images/icon-gold.png"
        }
    },
    {
        "action": {
            "selector": "a[href^=\"http://nightly.webkit.org/\"]",
            "type": "css-display-none"
        },
        "trigger": {
            "url-filter": ".*"
        }
    }
]

"webkit.org/images/icon-gold.png"はブロックして、
"http://nightly.webkit.org"配下に向いたaタグをdisplay: noneにしてる感じ?

これすごい嫌な予感するのは私だけでしょうか。

OS X

この機能は同じくOS XSafariでも利用可能で、Safari Extensions BuilderにContent Blockerって設定箇所が新設されてるのでそこからJSONを追加する。

ちなみに、"onbeforeload"イベントと"canLoad"メッセージがdeprecatedになるらしい。

content blockingとかしたことないからよくわからない・・。

Shared Links

iOSOS XSafariで、共有リンクにリンクを転送できるようになります。
OS X用のサンプルコードが載ってましたが割愛。

あの機能・・使ってる人いるん?

HTML5 Media

AirPlay

Safari 9.0からは、JavaScriptからAirPlayが操れるように!
"WebKitPlaybackTargetAvailabilityEvent"を使ってAirPlayが利用可能かを判断します。

if (window.WebKitPlaybackTargetAvailabilityEvent) {
    video.addEventListener('webkitplaybacktargetavailabilitychanged', function(ev) {
        switch (ev.availability) {
        // 使えるとき
        case "available": 
        // ...
        break;
        // 使えないとき
        case "not-available"