aboutsummaryrefslogtreecommitdiffstats
path: root/commandBookmarklet.js
diff options
context:
space:
mode:
authoranekos2009-05-10 09:38:08 +0000
committeranekos2009-05-10 09:38:08 +0000
commit892de5c3f42bd852a3b9e811090fc57d545b0e74 (patch)
tree963ec697e9b8cd7448602e08409a5c3609d05c66 /commandBookmarklet.js
parent7675827f07779620ef68f39c1e424b60d9d4cfca (diff)
downloadvimperator-plugins-892de5c3f42bd852a3b9e811090fc57d545b0e74.tar.bz2
NoScript 対応(?) Sandbox で実行するオプション追加
インデント修正 git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@33215 d0d07461-0603-4401-acd4-de1884942a52
Diffstat (limited to 'commandBookmarklet.js')
-rw-r--r--commandBookmarklet.js85
1 files changed, 56 insertions, 29 deletions
diff --git a/commandBookmarklet.js b/commandBookmarklet.js
index c89817e..cc22cea 100644
--- a/commandBookmarklet.js
+++ b/commandBookmarklet.js
@@ -2,7 +2,7 @@
* bookmarklet wo command ni suru plugin
*
* @author halt feits <halt.feits@gmail.com>
- * @version 0.6.3
+ * @version 0.6.4
*/
let PLUGIN_INFO =
@@ -11,47 +11,53 @@ let PLUGIN_INFO =
<description>convert bookmarklets to commands</description>
<description lang="ja">ブックマークレットをコマンドにする</description>
<author mail="halt.feits@gmail.com">halt feits</author>
-<version>0.6.3</version>
+<version>0.6.4</version>
<minVersion>2.0pre</minVersion>
-<maxVersion>2.0pre</maxVersion>
+<maxVersion>2.1pre</maxVersion>
<updateURL>http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/commandBookmarklet.js</updateURL>
<detail><![CDATA[
== SYNOPSIS ==
-This plugin automatically converts bookmarklets to valid commands for Vimperator.
+ This plugin automatically converts bookmarklets to valid commands for Vimperator.
== COMMAND ==
-Nothing built-in command, but each bookmarklets convert to commands that start with "bml".
+ Nothing built-in command, but each bookmarklets convert to commands that start with "bml".
== EXAMPLE ==
-"Hatena-Bookmark" -> bmlhatena-bookmark
+ "Hatena-Bookmark" -> bmlhatena-bookmark
== GLOBAL VARIABLES ==
-command_bookmarklet_prefix:
-This variable determines the prefix of a command name.
+ command_bookmarklet_prefix:
+ This variable determines the prefix of a command name.
+ command_bookmarklet_use_sandbox:
+ When this variable is 1, execute the script of bookmarklets in Sandbox.
+ If you use NoScript addon, probably you should enable this option.
== KNOWN ISSUES ==
-When title has non-ASCII characters, it converts to unaccountable command.
-You should rewrite title of bookmarklet to ASCII characters, to escape this issue.
+ When title has non-ASCII characters, it converts to unaccountable command.
+ You should rewrite title of bookmarklet to ASCII characters, to escape this issue.
]]></detail>
<detail lang="ja"><![CDATA[
== SYNOPSIS ==
-このプラグインはブックマークレットを Vimperator で実行可能なコマンドに自動的に変換します。
+ このプラグインはブックマークレットを Vimperator で実行可能なコマンドに自動的に変換します。
== COMMAND ==
-固有のコマンドはありませんが、それぞれのブックマークレットは "bml" ではじまるコマンドに変換されます。
+ 固有のコマンドはありませんが、それぞれのブックマークレットは "bml" ではじまるコマンドに変換されます。
== EXAMPLE ==
-"Hatena-Bookmark" -> bmlhatena-bookmark
+ "Hatena-Bookmark" -> bmlhatena-bookmark
== GLOBAL VARIABLES ==
-command_bookmarklet_prefix:
-コマンドの先頭に付加される文字列を規定します。
-デフォルトは "bml"
+ command_bookmarklet_prefix:
+ コマンドの先頭に付加される文字列を規定します。
+ デフォルトは "bml"
+ command_bookmarklet_use_sandbox:
+ 1 の時、ブックマークレットのスクリプトを sandbox で実行します。
+ NoScript アドオンをつかっている場合は、このオプションを有効にする必要があるでしょう。
== KNOWN ISSUES ==
-タイトルに ASCII 文字以外が含まれている場合、わけのわからないコマンドになります。
-この問題を避けるためにブックマークレットのタイトルを ASCII 文字のみに書き換えることをおすすめします。
+ タイトルに ASCII 文字以外が含まれている場合、わけのわからないコマンドになります。
+ この問題を避けるためにブックマークレットのタイトルを ASCII 文字のみに書き換えることをおすすめします。
]]></detail>
</VimperatorPlugin>;
@@ -64,23 +70,44 @@ if (prefix === undefined)
let items = bookmarks.get('javascript:');
if (!items.length) {
- liberator.echoerr('No bookmarks set');
- return;
+ liberator.echoerr('No bookmarks set');
+ return;
}
items.forEach(function (item) {
- commands.addUserCommand(
- [toValidCommandName(item.title)],
- 'bookmarklet : ' + item.title,
- function () { liberator.open(item.url); },
- { shortHelp: 'Bookmarklet' },
- false
- );
+ commands.addUserCommand(
+ [toValidCommandName(item.title)],
+ 'bookmarklet : ' + item.title,
+ function () evalScript(item.url),
+ { shortHelp: 'Bookmarklet' },
+ false
+ );
});
+function stringToBoolean(str, defaultValue) {
+ return !str ? defaultValue
+ : str.toLowerCase() === 'false' ? false
+ : /^\d+$/.test(str) ? parseInt(str)
+ : true;
+}
+
+function evalInSandbox (str) {
+ let sandbox = new Components.utils.Sandbox(buffer.URL);
+ sandbox.__proto__ = content.window.wrappedJSObject;
+ return Components.utils.evalInSandbox(str, sandbox);
+}
+
+function evalScript (url) {
+ if (stringToBoolean(liberator.globalVariables.command_bookmarklet_use_sandbox, false)) {
+ evalInSandbox(url.replace(/^\s*javascript:/i, ''));
+ } else {
+ liberator.open(url);
+ }
+}
+
function toValidCommandName(str) {
- str = prefix + escape(str.replace(/ +/g, '').toLowerCase()).replace(/[^a-zA-Z]+/g,'');
- return str.substr(0, str.length > 50 ? 50 : str.length);
+ str = prefix + escape(str.replace(/ +/g, '').toLowerCase()).replace(/[^a-zA-Z]+/g,'');
+ return str.substr(0, str.length > 50 ? 50 : str.length);
}
} )();