utubo / firefox-simple_gesture

🦊An add-on that adds simple touch gestures for Firfox for Android. Sorry, I only check issues sometimes.
https://addons.mozilla.org/ja/firefox/addon/simple-gesture/
Other
32 stars 1 forks source link

任意のscriptを実行するか任意のアドオンと連携できるようにしたい #23

Closed utubo closed 6 years ago

utubo commented 6 years ago

機能を追加していくとキリがないのでユーザーにおまかせしたい。 脆弱性に気をつけないとマズイ。 ジェスチャの起点を渡せるかは怪しい

スクリプトを実行するなら evalInSandboxを使う。 サイズが大きくなるかもしれないので既存のiniとは別に持ちたい。 設定画面が面倒。作るのも使うのも面倒。 設定1個にして「頑張って分岐させろや!」のスタンスだと作るの楽だなぁ。でも解りづらいよなぁ スクリプト書いちゃえば↓も実現できる。

アドオンと連携なら ”simplage_gesutre"って名前で、detailsは {gesture: "L-R-L-R" }みたいにカスタムイベント発行する。 特権有りのコードから無しのドキュメントへ発行するの大丈夫?→念のためevalInSandbox使っとく? わるいぺーじでジェスチャを利用されたらやだなぁ 常に発行しちゃえばいいので設定画面が要らない。イベント捕まえる側が頑張る。 他のアドオンをこっちのアドオンに依存させちゃうのがとても微妙

utubo commented 6 years ago

イベント案コレで安全に行けそう?重そう…

let s = Components.utils.Sandbox(window);
s.SimpleGestureEventDetail = { gesture: gesture, target: targetNode };
s.evalInSandbox(() => {
  SimpleGestureEvnetDetail.target(new CustomEvent('simplegesture', { details: SimpleGestureEventDetail }));
})
utubo commented 6 years ago

スクリプトで設定1個案はこうかな…

let s = Components.utils.Sandbox(window); // ←コストかかりそうなので実際はキャッシュしておく。
s.SimpleGesture = { gesture: gesture, target: targetNode };
let result = s.evalInSandbox(SimpleGesture.ini.script); // すごく重そう
if (result === false) e.preventDefault();

で、設定画面で以下の通り設定してもらう。

if (SimpleGesture.gesture === 'L-R-L-R') {
  alert(’Hello world');
  return false; // preventDefault.
}

めんどくさい。 evalに渡す文字列が大きくなるから重そう

utubo commented 6 years ago

executeScriptでできました。 ソースが大変なことになったので整頓してからコミットする。