Changeset 33215

Show
Ignore:
Timestamp:
05/10/09 18:38:08 (4 years ago)
Author:
anekos
Message:

NoScript? 対応(?) Sandbox で実行するオプション追加
インデント修正

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/javascript/vimperator-plugins/trunk/commandBookmarklet.js

    r27364 r33215  
    33 * 
    44 * @author halt feits <halt.feits@gmail.com> 
    5  * @version 0.6.3 
     5 * @version 0.6.4 
    66 */ 
    77 
     
    1212<description lang="ja">ブックマークレットをコマンドにする</description> 
    1313<author mail="halt.feits@gmail.com">halt feits</author> 
    14 <version>0.6.3</version> 
     14<version>0.6.4</version> 
    1515<minVersion>2.0pre</minVersion> 
    16 <maxVersion>2.0pre</maxVersion> 
     16<maxVersion>2.1pre</maxVersion> 
    1717<updateURL>http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/commandBookmarklet.js</updateURL> 
    1818<detail><![CDATA[ 
    1919== SYNOPSIS == 
    20 This plugin automatically converts bookmarklets to valid commands for Vimperator. 
     20  This plugin automatically converts bookmarklets to valid commands for Vimperator. 
    2121 
    2222== COMMAND == 
    23 Nothing built-in command, but each bookmarklets convert to commands that start with "bml". 
     23  Nothing built-in command, but each bookmarklets convert to commands that start with "bml". 
    2424 
    2525== EXAMPLE == 
    26 "Hatena-Bookmark" -> bmlhatena-bookmark 
     26  "Hatena-Bookmark" -> bmlhatena-bookmark 
    2727 
    2828== GLOBAL VARIABLES == 
    29 command_bookmarklet_prefix: 
    30 This variable determines the prefix of a command name. 
     29  command_bookmarklet_prefix: 
     30    This variable determines the prefix of a command name. 
     31  command_bookmarklet_use_sandbox: 
     32    When this variable is 1, execute the script of bookmarklets in Sandbox. 
     33    If you use NoScript addon, probably you should enable this option. 
    3134 
    3235== KNOWN ISSUES == 
    33 When title has non-ASCII characters, it converts to unaccountable command. 
    34 You should rewrite title of bookmarklet to ASCII characters, to escape this issue. 
     36  When title has non-ASCII characters, it converts to unaccountable command. 
     37  You should rewrite title of bookmarklet to ASCII characters, to escape this issue. 
    3538 
    3639]]></detail> 
    3740<detail lang="ja"><![CDATA[ 
    3841== SYNOPSIS == 
    39 このプラグインはブックマークレットを Vimperator で実行可能なコマンドに自動的に変換します。 
     42  このプラグインはブックマークレットを Vimperator で実行可能なコマンドに自動的に変換します。 
    4043 
    4144== COMMAND == 
    42 固有のコマンドはありませんが、それぞれのブックマークレットは "bml" ではじまるコマンドに変換されます。 
     45  固有のコマンドはありませんが、それぞれのブックマークレットは "bml" ではじまるコマンドに変換されます。 
    4346 
    4447== EXAMPLE == 
    45 "Hatena-Bookmark" -> bmlhatena-bookmark 
     48  "Hatena-Bookmark" -> bmlhatena-bookmark 
    4649 
    4750== GLOBAL VARIABLES == 
    48 command_bookmarklet_prefix: 
    49 コマンドの先頭に付加される文字列を規定します。 
    50 デフォルトは "bml" 
     51  command_bookmarklet_prefix: 
     52    コマンドの先頭に付加される文字列を規定します。 
     53    デフォルトは "bml" 
     54  command_bookmarklet_use_sandbox: 
     55    1 の時、ブックマークレットのスクリプトを sandbox で実行します。 
     56    NoScript アドオンをつかっている場合は、このオプションを有効にする必要があるでしょう。 
    5157 
    5258== KNOWN ISSUES == 
    53 タイトルに ASCII 文字以外が含まれている場合、わけのわからないコマンドになります。 
    54 この問題を避けるためにブックマークレットのタイトルを ASCII 文字のみに書き換えることをおすすめします。 
     59  タイトルに ASCII 文字以外が含まれている場合、わけのわからないコマンドになります。 
     60  この問題を避けるためにブックマークレットのタイトルを ASCII 文字のみに書き換えることをおすすめします。 
    5561 
    5662]]></detail> 
     
    6571let items = bookmarks.get('javascript:'); 
    6672if (!items.length) { 
    67     liberator.echoerr('No bookmarks set'); 
    68     return; 
     73  liberator.echoerr('No bookmarks set'); 
     74  return; 
    6975} 
    7076 
    7177items.forEach(function (item) { 
    72     commands.addUserCommand( 
    73         [toValidCommandName(item.title)], 
    74         'bookmarklet : ' + item.title, 
    75         function () { liberator.open(item.url); }, 
    76         { shortHelp: 'Bookmarklet' }, 
    77         false 
    78     ); 
     78  commands.addUserCommand( 
     79    [toValidCommandName(item.title)], 
     80    'bookmarklet : ' + item.title, 
     81    function () evalScript(item.url), 
     82    { shortHelp: 'Bookmarklet' }, 
     83    false 
     84  ); 
    7985}); 
    8086 
     87function stringToBoolean(str, defaultValue) { 
     88  return !str                            ? defaultValue 
     89         : str.toLowerCase() === 'false' ? false 
     90         : /^\d+$/.test(str)             ? parseInt(str) 
     91         :                                 true; 
     92} 
     93 
     94function evalInSandbox (str) { 
     95  let sandbox = new Components.utils.Sandbox(buffer.URL); 
     96  sandbox.__proto__ = content.window.wrappedJSObject; 
     97  return Components.utils.evalInSandbox(str, sandbox); 
     98} 
     99 
     100function evalScript (url) { 
     101  if (stringToBoolean(liberator.globalVariables.command_bookmarklet_use_sandbox, false)) { 
     102    evalInSandbox(url.replace(/^\s*javascript:/i, '')); 
     103  } else { 
     104    liberator.open(url); 
     105  } 
     106} 
     107 
    81108function toValidCommandName(str) { 
    82     str = prefix + escape(str.replace(/ +/g, '').toLowerCase()).replace(/[^a-zA-Z]+/g,''); 
    83     return str.substr(0, str.length > 50 ? 50 : str.length); 
     109  str = prefix + escape(str.replace(/ +/g, '').toLowerCase()).replace(/[^a-zA-Z]+/g,''); 
     110  return str.substr(0, str.length > 50 ? 50 : str.length); 
    84111} 
    85112