逆引きMyScripts

MyScripts を指先で覚えたい人向けのページです。


特定のブラウザでURLを開く

// Libing の URL スキームを指定する
var scheme = "libhttp";
 
// URL の先頭の http 部分を置き換えて開く
TARGET = "openurl";
TEXT.replace(/^http/, scheme);
 

// Sleipnir の URL スキームを指定する
var scheme = "sleipnirblue";
 
// URL の先頭の http 部分を置き換えて開く
TARGET = "openurl";
TEXT.replace(/^http/, scheme);
 

要はブラウザの URL スキームさえわかれば機械的にできます。

NowPlaying(再生中の曲情報)をコピーする

SONG という独自変数を使います。SONG は以下のような仕様です。

SONG - 再生中の曲の情報。title/albumTitle/artistの各属性から取得できます。曲を再生していない場合、SONGがnullになります。

if (SONG === null) {
  // 音楽が再生中でないとき
  // ミュージックを開く
  TARGET = "openurl";
  "music://";
} else {
  // 音楽が再生中のとき
  // 曲情報をコピーする
  alert("曲情報をコピーします");
  TARGET = "copy";
  SONG.title + " by  " + SONG.artist;
}
 

コピー内容でGoogle検索する

URL 全体をエンコードするときは encodeURI、クエリ部分の一部をエンコードするときは encodeURIComponent を使います。
Google 検索するときなどは、後者を利用します。

TARGET = "openurl";
"https://www.google.co.jp/search?q=" + encodeURIComponent(TEXT);
 

MyScripts には、独自変数をエンコードした ENC〜 変数が用意されています。
TEXT 変数に対しては、ENCTEXT 変数が該当します。

この変数を使用することで、GoogleSearch-1 は以下のように書き換えられます。

TARGET = "openurl";
"https://www.google.co.jp/search?q=" + ENCTEXT;
 

以下蛇足ですが、はまりやすいポイントです。

encodeURIComponent が『!'()*』などをエンコードしてくれないために、まれに予期せぬ動作をすることがあります。
そのようなときは、多少強引ですが、以下のように力技でエンコードします。

// ごり押しエンコード
function encURI(uri) {
  var ch;
  return encodeURIComponent(uri).replace(/[!'()*]/g, function() {
    ch = RegExp.lastMatch;
    return ch === "*" ? "%2A" : escape(ch);
  });
}
 
TARGET = "openurl";
"https://www.google.co.jp/search?q=" + encURI(TEXT);
 

2重エンコードするときなどは、この最後の方法が無難です。

クリップボード制御

クリップボードのテキストを参照するときは、CLIPBOARD 変数を使います。
クリップボードにコピーするときは COPY を使います。
COPY は TARGET="copy"; と異なり、処理の途中でコピーできます。

// クリップボードのテキストを取得
var formula = CLIPBOARD;
var result;
 
try {
  // クリップボードの式を計算 
  result = eval(formula);
  // 結果をコピー
  COPY(result);
} catch (e) {
  // クリップボードのテキストが計算式以外のとき
  // エラーメッセージを表示
  result = e.message;
}
 
TARGET = "info";
result;
 

HTMLを自動生成する

MyScripts では、TEXT 変数から入力データを受け取り、加工して、それを元に HTML を生成することができます。
多くの場合は #HTML で十分なのですが、IS_HTML = true; を使用した方が便利なこともあります。

ここではその開発の手順を示します。

1. #HTML でプロトタイプを作成します。最終的には不要になりますが、これがあるとメンテナンスしやすくなります。

#HTML
<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no">
    <title>grep</title>
    <link rel="stylesheet" href="./jqm/jquery.mobile.css">
    <script src="./jquery.js"></script>
    <script src="./jqm/jquery.mobile.js"></script>
    <script>
function append(lines) {
  var $list = $('#grep-list');
 
  for (var i = 0; i < lines.length; i++)
    $('<li>').text(lines[i]).appendTo($list);
 
  $list.listview('refresh');
}
 
onload = function() {
  var lines = TEXT.split('\n');
  append(lines);
}
    </script>
  </head>
  <body>
    <section data-role="page">
      <header data-role="header" data-position="fixed">
        <h1>grep</h1>
      </header>
      <div data-role="content">
        <ul id="grep-list" data-role="listview" data-filter="true" data-filter-placeholder="Filter lines...">
        </ul>
      </div>
    </section>
  </body>
</html>
 

2. 最終的に他のアプリで開くならば、jQuery Mobile や Twitter Bootstrap のファイルを外部参照するよう修正する
<link rel="stylesheet" href="./jqm/jquery.mobile.css">
<script src="./jquery.js"></script>
<script src="./jqm/jquery.mobile.js"></script>
 

上記の箇所を以下のように修正する。

<link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css">
<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
<script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>
 


3. 先頭の #HTML を除いた部分を選択し、コピーする

4. クリップボードのテキストを登録 を使い、HTML を文字列化する

5. ファイル名などの指定や、HTML を修正する記述を行う

var html = "<!DOCTYPE html>\n<html>\n  <head>\n    <meta name=\"viewport\" content=\"width=device-width,initial-scale=1,user-scalable=no\">\n    <title>grep</title>\n    <link rel=\"stylesheet\" href=\"http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css\">\n    <script src=\"http://code.jquery.com/jquery-1.8.2.min.js\"></script>\n    <script src=\"http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js\"></script>\n    <script>\nfunction append(lines) {\n  var $list = $('#grep-list');\n\n  for (var i = 0; i < lines.length; i++)\n    $('<li>').text(lines[i]).appendTo($list);\n\n  $list.listview('refresh');\n}\n\nonload = function() {\n  var lines = decodeURIComponent('";
html += ENCTEXT;
html += "').split('\\n');\n  append(lines);\n}\n    </script>\n  </head>\n  <body>\n    <section data-role=\"page\">\n      <header data-role=\"header\" data-position=\"fixed\">\n        <h1>grep</h1>\n      </header>\n      <div data-role=\"content\">\n        <ul id=\"grep-list\" data-role=\"listview\" data-filter=\"true\" data-filter-placeholder=\"Filter lines...\">\n        </ul>\n      </div>\n    </section>\n  </body>\n</html>";
 
FILENAME = "grep";
IS_HTML = true;
 
TARGET="openin";
html;
 

openin することで、生成したHTMLを別アプリで開きます。HTML が使える別アプリとの連携にも、MyScripts は使えるわけです。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2013年02月18日 23:23