userChrome.jsスクリプトのe10s対応 2015-08-23 (Sun) 22:14

e10sなuserChrome.jsスクリプトで、loadFrameScriptに渡すcontentスクリプトについて。

data:application/javascriptで同一ソース内に記述したいのだが、文字列でずらずら書くとクォーテーションのエスケープとかやっかいな問題がある上に、判読性も低くなる。

そんなわけで、ソース内にcontentスクリプトを関数として書いておき、toStringで文字列化して渡してみる。
動いているようなのでこんなのでいいか。

例) 表示領域内にある最初のinputタグにフォーカス
(function(){
function contentScript(){
function focusFirstInputTag(aEvent){
var doc = aEvent.originalTarget;
var window = doc.defaultView;
var cHeight = window.innerHeight; //doc.documentElement.clientHeight;
var cWidth = window.innerWidth; //doc.documentElement.clientWidth;
var pXoffset = window.pageXOffset;
var pYoffset = window.pageYOffset;
var node = doc.querySelector('input[type="text"]:not([disabled]):not([readonly]), '
+ 'input:not([type]):not([disabled]):not([readonly])');

for(var oTop = 0, oLeft = 0, parent = node; parent; parent = parent.offsetParent){
oTop += parent.offsetTop;
oLeft += parent.offsetLeft;
}
if(node &&
pYoffset <= oTop && oTop < (pYoffset + cHeight) &&
pXoffset <= oLeft && oLeft < (pXoffset + cWidth)){
node.focus();
}
}
function onLoad(aEvent){
focusFirstInputTag(aEvent);
}
addEventListener('DOMContentLoaded', onLoad, false);
}
var src = contentScript.toString();
var script = 'data:application/javascript;charset=utf-8,' + encodeURIComponent('(' + src + ')();');
window.messageManager.loadFrameScript(script, true);
contentScript = null;
})();
関連記事

コメントの投稿

管理者にだけ表示を許可する

注意事項
基本的にこのブログはブログ主の備忘録です。

ブログの内容にはブログ主の主観や時には正確でない情報が含まれていることもあります。書いてある内容がすべての環境にあてはまることを保証するものでもありません。
また過去の記事の情報はそれが参照された時点では既に陳腐化していることもあります。

その辺をご理解の上で当ブログ内に書いてあることを試す場合は自己責任でお願いします。

万一何らかの損害が生じても責任は持てませんのであしからず!

記事内容の誤りの指摘、疑問点の回答などコメント頂けると助かります。
カレンダー
03 | 2017/04 | 05
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -
ブログ内検索
カラーコードチェッカ
カラーコードの確認
入力例) #ffffff | blue
カテゴリ
最新記事
最新コメント
最新トラックバック
リンク
ブロとも申請フォーム

この人とブロともになる

メールフォーム

名前:
メール:
件名:
本文: