10/05/2010

開いている全てのタブに処理を走らせる [Safari Extensions を作ってみる:第十一回]

「機能拡張ビルダー」の一番下に「機能拡張の設定」という項目があるけど、レイアウトを自由にはできないので、場合により美しくないレイアウトになってしまう。そこで、読み込んだページに独自の要素で設定画面を設けることもあるけど、その設定画面でユーザーが変更した場合、有効なのは操作しているタブに限られてしまう。そこで、ユーザーが設定を保存するタイミングで、開いている全てのタブに処理を走らせ、設定の同期を行う必要が出てくる。

Safari Extensions では、「グローバルページ」で記述した Javascript であれば、開いているウィンドウやタブの枚数を取得し、それぞれをターゲットにして処理を走らせることができる。

以下は、グローバルページから全てのタブに chgSettings の処理を走らせる場合。

★「グローバルページ」で指定した html 内の Javascript
<!doctype html>
<html lang="en">
<head>
<script type="text/javascript">
// 記述が長くなるので、with() でまとめる
  with (safari.application) {
// browserWindows では開いているウィンドウの枚数が判別できる
    for (var w = 0; w < browserWindows.length; w++) {
// tabs では開いているタブの枚数を判別できる
      for (var t = 0; t < browserWindows[w].tabs.length; t++) {
        tabs[t].page.dispatchMessage("chgSettings", settingValues);
      }
    }
  }
</script>
</head>
<body></body>
</html>

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.