- -pv
スレッドの閲覧状況:
現在、- がスレを見ています。
これまでに合計 - 表示されました。
※PC・スマホの表示回数をカウントしてます。
※24時間表示がないスレのPVはリセットされます。

Mozilla Firefox 拡張機能スレッド【お兄ちゃん】

1名無しさん:2012/06/17(日)13:01:37 ID:EwHe3A8fi()
◆関連サイト
Add-ons for Firefox
https://addons.mozilla.org/ja/firefox/
Add-ons Mirror
http://forum.addonsmirror.net/
Mozilla Japan - Firefox アドオン
https://addons.mozilla.jp/firefox/
Mozilla Firefox Thunderbird の拡張あれこれ
http://beau.g-com.ne.jp/mon-extension.html
Mozilla Developer Street
https://dev.mozilla.jp/
MozillaZine.jp
http://mozillazine.jp/
Firefox更新情報 Wiki*
http://wikiwiki.jp/firefox/

◆インストール済みの拡張機能、テーマ、プラグインの一覧を表示できる拡張機能
(スレへの拡張一覧の貼り付け、拡張機能の管理に便利)
InfoLister
https://addons.mozilla.org/ja/firefox/addon/infolister/
MR Tech Toolkit
https://addons.mozilla.org/ja/firefox/addon/mr-tech-toolkit/
Extension List Dumper
https://addons.mozilla.org/en-US/firefox/addon/extension-list-dumper/

◆インストールしているFirefoxアドオン(一覧)をプロファイル間で同期できるアドオン「Siphon」
Siphon
https://addons.mozilla.org/en-US/firefox/addon/siphon-add-on-synchronizer/
2名無しさん :2012/06/17(日)13:07:45 ID:EwHe3A8fi()
姉妹スレ

Mozilla Firefox 【お兄ちゃん】
http://anago.open2ch.net/test/read.cgi/software/1339905019/l10

Mozilla Firefox質問スレッド【お兄ちゃん】
http://anago.open2ch.net/test/read.cgi/software/1339905274/

Mozilla Firefox 拡張機能スレッド【お兄ちゃん】
http://anago.open2ch.net/test/read.cgi/software/1339905697/

次スレ建てるときは本家2chと区別するため、スレタイに【お兄ちゃん】を入れてね
3名無しさん :2012/06/17(日)13:09:37 ID:EwHe3A8fi()
test
5名無しさん :2012/06/18(月)17:23:07 ID:kMwbQRkwj
ヤッホー
6名無しさん :2012/06/18(月)17:23:44 ID:kMwbQRkwj
a
7名無しさん :2013/11/07(木)05:04:09 ID:MipDJk3Yy
イイ <menupopup id="menu_FilePopup"><menuitem label="再起動"/></menupopup>
ダメ <menupopup id="menu_FilePopup"><menuitem label="再起動(&R)"/></menupopup>
8名無しさん :2013/11/07(木)05:10:01 ID:MipDJk3Yy
再起動アドイン
myaddin.xul

<?xml version="1.0"?>
<overlay id="myaddin"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<menupopup id="menu_FilePopup">
<menuitem id="myReboot" label="再起動" accesskey="R" oncommand="Application.restart();"/>
</menupopup>
</overlay>
9名無しさん :2013/11/07(木)05:16:20 ID:MipDJk3Yy
MenuID 一覧

Firefoxを便利に - CSS - Apprentice Cafe
http://blog.goo.ne.jp/apprentice_dora/e/1e1f38779abfffcdfa42c79394138155
10名無しさん :2013/11/07(木)05:21:05 ID:MipDJk3Yy
終了(&X)の上に挿入

<menupopup id="menu_FilePopup">
<menuitem id="myReboot2" label="再起動" accesskey="R" oncommand="Application.restart();" insertbefore="menu_FileQuitItem"/>
</menupopup>
11名無しさん :2013/11/07(木)12:38:01 ID:MipDJk3Yy
■アドオンの作成
文字コードはUTF-8

□アドイン本体用のフォルダを作り、3つのテキストファイルを作る
D:\FireFoxAddins\myaddin\chrome.manifest
D:\FireFoxAddins\myaddin\install.rdf
D:\FireFoxAddins\myaddin\chrome\content\myaddin.xul

□chrome.manifestファイルの内容
content myaddin chrome/content/
overlay chrome://browser/content/browser.xul chrome://myaddin/content/myaddin.xul

□install.rdfファイルの内容
<?xml version="1.0"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:em="http://www.mozilla.org/2004/em-rdf#">
<Description about="urn:mozilla:install-manifest">
<em:id>myaddin@ne.jp</em:id>
<em:name>MyAddin</em:name>
<em:version>1.0</em:version>
<em:type>2</em:type>
<em:targetApplication>
<Description>
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
<em:minVersion>1.0+</em:minVersion>
<em:maxVersion>50.5.5.*</em:maxVersion>
</Description>
</em:targetApplication>
</Description>
</RDF>

□myaddin.xulファイルの内容
<?xml version="1.0"?>
<overlay id="myaddin"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<menupopup id="menu_FilePopup">
<menuitem id="myReboot" label="再起動" accesskey="R" oncommand="Application.restart(); " insertbefore="menu_FileQuitItem"/>
</menupopup>
<script>
// JavaScriptを書くならここ
</script>
</overlay>
12名無しさん :2013/11/07(木)12:39:13 ID:MipDJk3Yy
■アドオンのインストール

□プロフィールのextensionsフォルダ内にmyaddin@ne.jp という名前のテキストファイルを作る
C:\Documents and Settings\ユーザー名\Application Data\Mozilla\Firefox\Profiles\xxxxxxxx.default\extensions\myaddin@ne.jp

他のextensionsフォルダに置いても何も起きない。
ファイル名はメールアドレス形式以外だとどうなるか不明。
他のプロフィールでもアドオンを使いたい場合、その都度ファイルを作成する必要があるみたい。

□myaddin@ne.jpの内容はアドオン本体を格納する場所
D:\FireFoxAddins\myaddin\
13名無しさん :2013/11/07(木)12:41:42 ID:MipDJk3Yy
FireFox再起動時にアドオンをインストールするかどうか聞いてくる。
聞いてこない場合は失敗している。
間違えていてもエラーは出ない。
14名無しさん :2013/11/07(木)13:48:44 ID:MipDJk3Yy
gBrowserのプロパティー
ブラウザ - Firefoxアドオン開発
http://www.crystal-creation.com/web-appli/technical-information/browser/firefox/add-on/develop/ui/xul/elements/browser/

スクラッチパッドのショートカットキー
ソースエディタの使用 - 開発ツール | MDN
https://developer.mozilla.org/ja/docs/Tools/Using_the_Source_Editor
15名無しさん :2013/11/07(木)13:55:44 ID:MipDJk3Yy
Scratchpad - 開発ツール | MDN
https://developer.mozilla.org/ja/docs/Tools/Scratchpad

Ctrl+I でスクラッチパッドにプロパティー一覧が表示される
16名無しさん :2013/11/07(木)14:17:11 ID:MipDJk3Yy
clipboardData の使用例

https://bug407983.bugzilla.mozilla.org/attachment.cgi?id=292749

function init() {
 if (document.attachEvent) {
  // IE method
  document.body.attachEvent('onpaste', function() {
   alert('Clipboard data:' + window.clipboardData.getData('Text'));
  });
 } else {
  // WebKit method
  document.addEventListener('paste', function(e) {
   if (e.clipboardData)
    alert('Clipboard data:' + e.clipboardData.getData('text/plain'));
  }, false);
 }
}
17名無しさん :2013/11/07(木)14:28:46 ID:MipDJk3Yy
上は貼り付けるときに発生するイベント内でデータを取得してる

この設定をすれば他でも使えるのかも
Security preferences - Midas | MDN
https://developer.mozilla.org/en-US/docs/Midas/Security_preferences
18名無しさん :2013/11/07(木)15:01:40 ID:MipDJk3Yy
ここにある方法では、Exception: jQuery is not defined がでる

Firefox - Scratchpad - PIB - Seesaa Wiki(ウィキ)
http://wiki.livedoor.jp/kou1okada/d/Firefox%20-%20Scratchpad

function include(url) {
 var e = document.createElement("script");
 e.type = "text/javascript";
 e.src = url;
 document.body.appendChild(e);
}
include("https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js");

document.title = jQuery.trim(' A B C ');
19名無しさん :2013/11/07(木)16:36:15 ID:MipDJk3Yy
この関数がアドインではインストールに失敗する
スクラッチパッドでは大丈夫
意味分からん

function fillChar(c, count) {
 var s='';
 for (var i=0; i<count; i++) { s=s+c; }
 return s;
}

//document.title = fillChar('a', 5);
20名無しさん :2013/11/07(木)16:40:11 ID:MipDJk3Yy
for のところで、
「整形式になっていません。」ってエラーが出てた
21名無しさん :2013/11/07(木)16:45:14 ID:eDVQKQZ8q
コメントアウトは無効らしい
Number() はダメ
Number() はなんで大文字で始まるんだ?

//for (var i=0; i<Number(count); i++) { s=s+c; }
22名無しさん :2013/11/07(木)16:47:21 ID:eDVQKQZ8q
if は問題なし
if (count==10) return 1;
23名無しさん :2013/11/07(木)16:48:08 ID:MipDJk3Yy
これはダメだった
if (count<10) return 1;
24名無しさん :2013/11/07(木)16:53:00 ID:eDVQKQZ8q
行を分けたら、 < で整数式になっていませんがでる

if (count
<
10
)
return 1;
25名無しさん :2013/11/07(木)16:54:47 ID:MipDJk3Yy
if (count == 10) return 1;
は大丈夫
> を使わないでやるのか?
forループではなくて、while つかえばいいか
26名無しさん :2013/11/07(木)16:57:20 ID:eDVQKQZ8q
これでいいのか
下手したら無限ループだ
for (var i=0; i != abs(count); i++) {s=s+c;}
27名無しさん :2013/11/08(金)05:53:14 ID:MGExszMCG
ここに任意のURLをローカルファイルに保存する方法があるから、
もしかしてopen2chの全板のsubjects.txtを読み込めるのかもしれない。
そうすれば、全板の集計が可能だ。

Miscellaneous - Code snippets | MDN
https://developer.mozilla.org/en-US/docs/Code_snippets/Miscellaneous
Saving an arbitrary URL to a local file
28名無しさん :2013/11/08(金)06:01:49 ID:MGExszMCG
■JavaScript の ON/OFF
「ツール」メニューの「オプション」の上に出ます

<?xml version="1.0"?>
<overlay id="testaddin"
 xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 <menupopup id="menu_ToolsPopup">
  <menuitem id="myJavaScript" label="JavaScript" accesskey="J"
   type="checkbox" checked="false" insertbefore="prefSep"
   oncommand="onJavaScript();"/>
 </menupopup>
<script>
function onJavaScript(event) {
 var prefBranch = Components.classes[ '@mozilla.org/preferences-service;1' ]
   .getService(Components.interfaces.nsIPrefBranch );
 var value = prefBranch.getBoolPref('javascript.enabled');
 prefBranch.setBoolPref('javascript.enabled', !value);
 value = prefBranch.getBoolPref('javascript.enabled');
 event.target.setAttribute("checked", value);
 document.title = value?'JavaScript ON':'JavaScript OFF';
}
</script>
</overlay>
29名無しさん :2013/11/08(金)06:08:32 ID:MGExszMCG
最後、この順番でないとダメだわ。 なぜか。

document.title = value?'JavaScript ON':'JavaScript OFF';
event.target.setAttribute("checked", value);
30名無しさん :2013/11/08(金)07:11:32 ID:MGExszMCG
スクラッチパッドは選択した範囲のみ実行できる。
不要な部分をいちいちコメントアウトしなくてもいいってことだ。
31名無しさん :2013/11/08(金)07:14:49 ID:MGExszMCG
アドインの開発に便利かな?

Scratchpad - 開発ツール | MDN
https://developer.mozilla.org/ja/docs/Tools/Scratchpad

スクラッチパッドを Firefox 内部へのアクセスに使用する
about:config で設定 devtools.chrome.enabled を true
32名無しさん :2013/11/08(金)08:15:01 ID:MGExszMCG
アドオン内からTEXTAREAを追加する
これを出力先にしていろいろ試す

function getMyTextArea() {
var e=gBrowser.contentDocument.getElementById('MyTextArea');
if (e==undefined) {
e=gBrowser.contentDocument.createElement('textarea');
e.id='MyTextArea';
e.style='position:fixed;left:0;top:0;width:50%;height:25%';
gBrowser.contentDocument.body.appendChild(e);
}
return e;
}
function setText(text) {getMyTextArea().innerHTML=text;}
function addText(text) {var e=getMyTextArea();e.innerHTML = e.innerHTML+text+'\n';}

setText('test test');
33名無しさん :2013/11/08(金)08:48:01 ID:0HyowMl/F
× a<0
○ !a>=0
まさかね・・・
34名無しさん :2013/11/08(金)09:14:21 ID:MGExszMCG
if (!a>=0) alert(a);
でエラーが消えました。 助かりました
35名無しさん :2013/11/08(金)09:44:39 ID:xmmCLWtA3
キーイベントのシミュレートでクリップボードへのコピーは出来るのかな?

Miscellaneous - Code snippets | MDN
https://developer.mozilla.org/ja/docs/Code_snippets/Miscellaneous

utils.sendkeyEvent firefox - Google 検索
http://www.google.co.jp/search?q=utils.sendkeyEvent+firefox
36名無しさん :2013/11/08(金)10:06:11 ID:MGExszMCG
■Firefox自身の全element取得

>>32をコピペ

function fillChar(c, count) {
var s='';
for (var i=0; i<count; i++) { s=s+c; }
return s;
}

var d = document;
var indent = 0;

function add(e) {
var id = e.id ? 'id=' + e.id : '';
var name = e.name ? '; name=' + e.name : '';
var title = e.title ? '; title=' + e.title : '';
var value = e.value ? '; value=' + e.value : '';
var innerHTML = e.innerHTML ? '; innerHTML=' + e.innerHTML : '';
innerHTML = innerHTML.slice(0, 40).replace(/\n/, '');
var className = e.className ? '; className=' + e.className : '';
addText(fillChar(' ', indent*2) + e + ' ' +
id +
name +
//className +
innerHTML +
value +
title);
}

function enumChildren(e) {
add(e);
if (e.childNodes.length > 0) {
indent++;
for (var i=0; i<e.childNodes.length; i++)
enumChildren(e.childNodes[i]);
indent--;
}
}

setText('document.childNodes.length=' + document.childNodes.length);
for (var i=0; i<d.childNodes.length; i++) {
enumChildren(d.childNodes[i]);
}
37名無しさん :2013/11/08(金)10:09:58 ID:MGExszMCG
インデント忘れた
あと、
about:config で
devtools.chrome.enabled = true
にして、スクラッチパッドの「実行環境」を「ブラウザ」にしないと使えません。
38名無しさん :2013/11/08(金)10:50:01 ID:MGExszMCG
■メインメニューのidとlabel一覧

var indent = 0;
var d = document.getElementById('main-menubar');

function add(e) {
 addText(fillChar(' ', indent*2) + e.id + " '" + e.label + "'");
}

function enumChildren(e) {
 add(e);
 if (e.childNodes.length > 0) {
  indent++;
  for (var i=0; i<e.childNodes.length; i++)
   enumChildren(e.childNodes[i]);
  indent--;
 }
}

setText('d.childNodes.length=' + d.childNodes.length);
for (var i=0; i<d.childNodes.length; i++) {
 enumChildren(d.childNodes[i]);
}
39名無しさん :2013/11/08(金)11:02:57 ID:MGExszMCG
呼び出せないかな
エラーは出ないんだけど、コピーできない

id="menu_copy"
label="コピー"
key="key_copy"
accesskey="c"
command="cmd_copy"
acceltext="Ctrl+C"/>

var e = document.getElementById('menu_copy');
e.command;
e.cmd_copy;
40名無しさん :2013/11/08(金)11:33:54 ID:MGExszMCG
for (var i=0; i<d.childNodes.length; i++) {
enumChildren(d.childNodes[i]);
}
はなくても、
enumChildren(d);
でいけるッス
41名無しさん :2013/11/08(金)13:34:12 ID:MGExszMCG
ブックマークレット版(要JavaScript ON)
http://toro.open2ch.net/test/read.cgi/tech/1372630732/21

<?xml version="1.0"?>
<overlay id="testaddin"
 xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 <popup id="contentAreaContextMenu">
 <menuitem label="選択範囲をホストから検索" accesskey="D"
  insertafter="context-searchselect" oncommand="searchFromHost();"/>
</popup>
<script>
function searchFromHost() {
 document.title = content.getSelection();
 gBrowser.selectedTab = gBrowser.addTab('http://www.google.com/search?q=site:' +
  gBrowser.contentDocument.domain + ' "' + content.getSelection() + '"');
}
</script>
</overlay>
42名無しさん :2013/11/08(金)14:20:11 ID:MGExszMCG
こっち
フレームはどうすんのかな

<?xml version="1.0"?>
<overlay id="testaddin"
 xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 <popup id="contentAreaContextMenu">
  <menuitem id="searchfromhost" label="選択範囲をホストから検索" accesskey="D"
   insertafter="context-searchselect" oncommand="onSearchFromHost();"/>
  </popup>
<script>
function onSearchFromHost() {
 gBrowser.selectedTab = gBrowser.addTab('http://www.google.com/search?q=site:' +
  gBrowser.contentDocument.domain + ' "' + content.getSelection() + '"');
}
function onSearchFromHostShow(event) {
 // document.title = content.getSelection(); // フレームだとうまくいかない
 var e = document.getElementById("searchfromhost");
 e.hidden = !content.getSelection().toString().length > 0;
}
function onAddonLoaded() {
 window.removeEventListener("load", onAddonLoaded, false);
 var contextMenu = document.getElementById("contentAreaContextMenu");
 if (contextMenu)
  contextMenu.addEventListener("popupshowing", onSearchFromHostShow, false);
}
window.addEventListener('load', onAddonLoaded, false);
</script>
</overlay>
43名無しさん :2013/11/08(金)14:38:15 ID:MGExszMCG
testaddin.xul から myaddin.xul の関数をそのまま呼び出せるんだが
44名無しさん :2013/11/08(金)14:47:22 ID:MGExszMCG
クロシージャ化すればいいのか

(function() {..})();

[JavaScript] 猿でもわかるクロージャ超入門 3 無名関数 - DQNEO起業日記
http://dqn.sakusakutto.jp/2009/01/javascript_2.html
45名無しさん :2013/11/08(金)14:55:40 ID:xmmCLWtA3
クロシージャにすると、
ReferenceError: onSearchFromHost is not defined @ chrome://browser/content/browser.xul:1

 <popup id="contentAreaContextMenu">
  <menuitem id="searchfromhost" label="選択範囲をホストから検索" accesskey="D"
   insertafter="context-searchselect" oncommand="onSearchFromHost();"/>
 </popup>
46名無しさん :2013/11/08(金)15:03:58 ID:xmmCLWtA3
スクリプトのパッケージ化で解決

var myaddin = {
D: function(s) {
},
onJavaScript: function(event) {
}
};
47名無しさん :2013/11/08(金)16:06:32 ID:MGExszMCG
クリップボードへのコピー、できちゃったかも!

gBrowser.contentViewerEdit.copySelection();

Mozilla: nsIContentViewerEdit Interface Reference
http://doxygen.db48x.net/mozilla/html/interfacensIContentViewerEdit.html
48名無しさん :2013/11/08(金)16:09:01 ID:MGExszMCG
任意のデータをコピーできないのか
あくまでも選択範囲のコピー
49名無しさん :2013/11/08(金)16:10:34 ID:MGExszMCG
textareaに書き込んで範囲選択すればコピー可能だ
50名無しさん :2013/11/08(金)17:15:58 ID:MGExszMCG
■スレ一覧をソートして一列表示(日時付き) (1/2)
http://toro.open2ch.net/test/read.cgi/tech/1372630732/27
のアドオンバージョン。 URLを調べて自動でやってくれます。

<?xml version="1.0"?>
<overlay id="testaddin"
 xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script>
function myOpen2chSort() {
 var d=gBrowser.contentDocument;
 var n=d.getElementsByTagName('a');
 var p=n[0].parentNode;
 var a=new Array();
 for(var i=n.length-1;i>=0;i--){
  a.push(n[i]);
  p.removeChild(n[i])
 }
 a.sort(function(a,b){return a.href>b.href?-1:1;});
 function f(s){
  var r=s.lastIndexOf('/');
  var l=s.lastIndexOf('/', r-1);
  var D='日月火水木金土';
  var d=new Date(s.substring(l+1, r)*1000);
  function b(s){return ('0'+s).slice(-2);}
  return d.getFullYear()+'年'+b(d.getMonth()+1)+'月'+b(d.getDate())+'日'+
  '('+D[d.getDay()]+') '+b(d.getHours())+':'+b(d.getMinutes())+':'+b(d.getSeconds());
 }
 for(var i=0;!(i>=a.length);i++){
  p.appendChild(d.createTextNode(f(a[i].href)+' '));
  p.appendChild(a[i]);
  p.appendChild(d.createElement('br'));
 }
};
51名無しさん :2013/11/08(金)17:16:23 ID:MGExszMCG
■スレ一覧をソートして一列表示(日時付き) (2/2)

function testDocLoaded() {
 var host = gBrowser.contentWindow.location.hostname;
 var path = gBrowser.contentWindow.location.pathname; // ?以降は含まれない
 var domain = host.slice(-'.open2ch.net'.length);
 var filename = path.slice(-'/subback.html'.length);
 if (domain == '.open2ch.net') { // &&で整数じゃないエラーがでる
  if (filename == '/subback.html') {
   myOpen2chSort();
  }
 }
}

function testAddonLoaded() {
 window.removeEventListener("load", testAddonLoaded, false);
 gBrowser.addEventListener("load", testDocLoaded, true);
}
window.addEventListener('load', testAddonLoaded, false);
</script>
</overlay>
52名無しさん :2013/11/09(土)05:04:10 ID:pMHSs4IBT
about:buildconfig
にソースへのリンクがある
53名無しさん :2013/11/09(土)05:23:47 ID:pMHSs4IBT
mozilla-release: files
http://hg.mozilla.org/releases/mozilla-release/file/

browser
http://hg.mozilla.org/releases/mozilla-release/file/04c7298bde7c/browser/base/content
http://hg.mozilla.org/releases/mozilla-release/file/04c7298bde7c/browser/base/content/browser.js
http://hg.mozilla.org/releases/mozilla-release/file/04c7298bde7c/browser/base/content/browser.xul

scratchpad
http://hg.mozilla.org/releases/mozilla-release/file/04c7298bde7c/browser/devtools/scratchpad/scratchpad.js
http://hg.mozilla.org/releases/mozilla-release/file/04c7298bde7c/browser/devtools/scratchpad/scratchpad.xul
54名無しさん :2013/11/09(土)06:31:47 ID:pMHSs4IBT
about:config devtools.chrome.enabled = trueで、
スクラッチパッドの「実行環境」が「ブラウザ」の時、
スクラッチパッドからアドオンの関数にアクセスできる。

「Webページ」の時は無理。
55名無しさん :2013/11/09(土)15:52:51 ID:pMHSs4IBT
スクラッチパッドの「実行環境」が「ブラウザ」で普通に読めた

http://toro.open2ch.net/test/read.cgi/tech/1372506269/71
56名無しさん :2013/11/10(日)07:23:14 ID:roJBBC1QR
テストで何度もgoogleにアクセスしてたらgoogleで検索できなくなった!
57名無しさん :2013/11/10(日)08:17:46 ID:roJBBC1QR
解除された
1時間くらい?
58名無しさん :2013/11/10(日)08:33:38 ID:roJBBC1QR
変数への代入を監視できるのか

Object.prototype.watch - JavaScript | MDN
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/watch?redirectlocale=ja&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FObject%2Fwatch
59名無しさん :2013/11/10(日)10:00:41 ID:roJBBC1QR
スクラッチパッドは Orion というエディタを使っている
JavaScriptで書かれていて、ソースコードは omni.ja になるのかな?
ja は jar 形式で圧縮されている
60名無しさん :2013/11/10(日)10:05:35 ID:roJBBC1QR
Orionをエレメントでいじったりできないのかな?
61名無しさん :2013/11/10(日)12:25:18 ID:roJBBC1QR
>>19-34
< で「整形式になっていません。」エラー対策

Extension Frequently Asked Questions | MDN
https://developer.mozilla.org/ja/docs/Extension_Frequently_Asked_Questions
XML パースエラーが出ましたがファイルに問題はないようです!
>原因としてよくあるのは、スクリプトや属性値の中に XML で特別な意味を持つ文字である & や < が
>存在する事によるものです。

3番目の解決方
別のファイルにスクリプトを置きそれを読み込む
<script type="application/x-javascript" src="our.js"/>
62名無しさん :2013/11/10(日)12:45:17 ID:roJBBC1QR
2番目でもいいな。 これで囲めばいいだけだ

<script><![CDATA[
function lesser(a,b) {
return a < b ? a : b;
}
]]></script>
63名無しさん :2013/11/10(日)17:34:15 ID:roJBBC1QR
■任意の文字列をクリップボードにコピー
removeChildだけでいいのか不明

function copyText(text) {
 var a = gBrowser.contentDocument.activeElement;
 var x = a.selectionStart;
 var y = a.selectionEnd;
 var e=gBrowser.contentDocument.createElement('textarea');
 try {
  e.style='position:fixed;left:0;top:0;width:0;height:0';
  gBrowser.contentDocument.body.appendChild(e);
  e.value = text;
  e.focus();
  e.setSelectionRange(0, text.length);
  gBrowser.contentViewerEdit.copySelection();
  a.focus();
  a.selectionStart = x;
  a.selectionEnd = y;
 } finally {
  gBrowser.contentDocument.body.removeChild(e);
 }
}
64名無しさん :2013/11/10(日)17:57:35 ID:roJBBC1QR
文字入力場所以外では選択範囲が解除される
65名無しさん :2013/11/11(月)06:17:36 ID:z8QcQKLLs
>>28-29

event.target.setAttribute("checked", value);
で event is undefined エラーが出るのでこれは削除
削除してもちゃんとチェックされてる
66名無しさん :2013/11/11(月)15:41:47 ID:z8QcQKLLs
■全ウィンドウ列挙
ブラウザやスクラッチパッドウィンドウオブジェクトが得られる
nsIWindowMediator - XPCOM インタフェースリファレンス | MDN
https://developer.mozilla.org/ja/docs/XPCOM_Interface_Reference/nsIWindowMediator?redirectlocale=ja&redirectslug=nsIWindowMediator

var type = '';
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
          .getService(Components.interfaces.nsIWindowMediator);
var enumerator = wm.getEnumerator(type);
while(enumerator.hasMoreElements()) {
 var win = enumerator.getNext();
 addText(win + ' ' + win.document.title);
 // |win| は [Object ChromeWindow] である(|window| と同等)。これに何かをする
}
67名無しさん :2013/11/11(月)16:19:53 ID:z8QcQKLLs
■フレームに対応した選択範囲取得

function myGetSelection() {
 if (gBrowser.contentWindow.frames.length == 0) {
  return content.getSelection().toString();
 } else {
  var name = gBrowser.contentDocument.activeElement.name;
  for (var i = 0; i < gBrowser.contentWindow.frames.length; i++) {
   if (gBrowser.contentWindow.frames[i].name == name)
    return gBrowser.contentWindow.frames[i].getSelection();
  }
 }
}
68名無しさん :2013/11/12(火)05:55:43 ID:9jGyXXvYa
フレームがさらに入れ子になっている場合はダメだった。
69名無しさん :2013/11/12(火)11:11:10 ID:9jGyXXvYa
ここにあった。 アドオンからだけど、documentでやるんだな

Miscellaneous - Code snippets | MDN
https://developer.mozilla.org/ja/docs/Code_snippets/Miscellaneous

現在選択されているテキストを取得
browser.xul にオーバーレイしている状況で、
var selectedText = document.commandDispatcher.focusedWindow.getSelection().toString();
70名無しさん :2013/11/12(火)11:11:45 ID:9jGyXXvYa
クリップボードへのコピーもここにあるので出来そう

Using the Clipboard | MDN
https://developer.mozilla.org/ja/docs/Using_the_Clipboard
71名無しさん :2013/11/12(火)13:49:03 ID:9jGyXXvYa
window.addEventListener('load', myAddonLoaded, false);

メインメニューの「ウィンドウを閉じる」menu_closeWindow を parentNode から
removeChild したらメニュー項目がいっぱい消えた
72名無しさん :2013/11/12(火)18:48:27 ID:9jGyXXvYa
スクラッチパッドのウィンドウタイプ

751740 _ Scratchpad should have a window type
https://bugzilla.mozilla.org/show_bug.cgi?id=751740

devtools:scratchpad
73名無しさん :2013/11/14(木)13:07:50 ID:IKT9s832U
Firefox25でスクラッチパッドにツールバーが付いたが、メニューと同じだし、狭くなるからいらない。
メニューの右が空いているのだが。

いいかげんエラーをコメントで追加するのをやめて欲しい
エラーが出たらエラー箇所にキャレットを移動して欲しい

「最近開いたファイルを開く」だけでなく、「最近開いたフォルダで開く」も追加して欲しい
74名無しさん :2013/11/14(木)13:33:36 ID:IKT9s832U
<em:maxVersion>*</em:maxVersion>
でいいのかな
75名無しさん :2013/11/14(木)16:08:25 ID:IKT9s832U
ウィンドウを作成する - XUL | MDN
https://developer.mozilla.org/ja/docs/XUL/Tutorial/Creating_a_Window
>xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
>この行は、XUL の名前空間を宣言します。全ての子要素が XUL である事を示すために、
>ウィンドウ要素でこの宣言を記述しておく必要があります。なお、この URL が実際に
>ダウンロードされることはありません。Mozilla は、この URL を内部的に見分けます。
76名無しさん :2013/11/14(木)16:19:32 ID:IKT9s832U
Firefoxアドオンの作り方[拡張機能の開発]
http://masahal.web.fc2.com/addon_lecture/
77名無しさん :2013/11/15(金)08:37:44 ID:Go4dlIJcY
外部プログラムの実行
関数にしてみた

Running applications - Code snippets | MDN
https://developer.mozilla.org/ja/docs/Code_snippets/Running_applications

function exec(filename, args, block) {
 var file = Components.classes["@mozilla.org/file/local;1"]
  .createInstance(Components.interfaces.nsILocalFile);
 file.initWithPath(filename);
 var process = Components.classes["@mozilla.org/process/util;1"]
  .createInstance(Components.interfaces.nsIProcess);
 process.init(file);
 // 最初のパラメータが true なら、スレッドはプロセスが終わるまでブロックされます。
 process.run(block, args, args.length);
}

exec("c:\\windows\\notepad.exe");
78名無しさん :2013/11/15(金)08:40:56 ID:Go4dlIJcY
こうしないとうごかんですばい
exec("c:\\windows\\notepad.exe", []);
79名無しさん :2013/11/15(金)08:44:47 ID:Go4dlIJcY
あるいは
Array.isArray(args) ? process.run(block, args, args.length) : process.run(block, [], 0);
80名無しさん :2013/11/15(金)11:57:07 ID:Go4dlIJcY
27からコマンドラインで指定できるけど、ブラウザコンソールの表示方法
HUDService.toggleBrowserConsole();

Browser Console - Firefox Developer Tools | MDN
https://developer.mozilla.org/en-US/docs/Tools/Browser_Console
>From Firefox 27 onwards, you can also start the Browser Console by launching
>Firefox from the command line and passing the -jsconsole argument:

いろんな機能があるけど、使いにくい
Web Console Helpers - 開発ツール | MDN
https://developer.mozilla.org/ja/docs/Tools/Web_Console/Helpers
81名無しさん :2013/11/17(日)16:17:19 ID:smNQGVvh7
プロファイルのextensionsフォルダに置いたアドオンインストール用の hohoho@ne.jp ファイルが勝手に消える問題。

install.rdf ファイルで id を間違えてた。
<em:id>hohohoo@ne.jp</em:id>
82名無しさん :2013/11/18(月)17:37:04 ID:i+YLRsNbY
panel には textarea は載せられない
変わりに textbox を載せる
83名無しさん :2013/11/19(火)11:40:52 ID:IfitoBZ1W
外部スクリプトの読み込み
Components.utils.import | MDN
https://developer.mozilla.org/ja/docs/Components.utils.import

外部スクリプトの実行
mozIJSSubScriptLoader - XPCOM インタフェースリファレンス | MDN
https://developer.mozilla.org/ja/docs/XPCOM_Interface_Reference/mozIJSSubScriptLoader
84名無しさん :2013/11/20(水)17:00:38 ID:JWVI+Luvn
Components.utils.import("resource://app/my_module.jsm");
のやり方はどうしても
Error: resource://foo/debugaddon.js - EXPORTED_SYMBOLS is not an array.
が出る
85名無しさん :2013/11/20(水)17:56:06 ID:JWVI+Luvn
-no-remote で起動すると、他アプリからDDEでURLとタイトルを取得できないみたい
86名無しさん :2013/11/21(木)13:41:37 ID:z2TkKbvzl
プロファイルのディレクトリとか取得

File I/O - Code snippets | MDN
https://developer.mozilla.org/ja/docs/Code_snippets/File_I_O
87名無しさん :2013/11/21(木)14:14:09 ID:z2TkKbvzl
HTML-特殊文字
http://pst.co.jp/powersoft/html/index.php?f=3401
88名無しさん :2013/11/21(木)14:57:40 ID:z2TkKbvzl
>>77
file.initWithPath(filename);
は、漢字が使えないみたいだ
89名無しさん :2013/11/22(金)07:57:01 ID:T26TR5jOj
プロファイルディレクトリしか取得できない

File I/O - Code snippets | MDN
https://developer.mozilla.org/ja/docs/Code_snippets/File_I_O

function getSpecialDir(name) {
 var file = Components.classes["@mozilla.org/file/directory_service;1"]
  .getService(Components.interfaces.nsIProperties)
  .get(name, Components.interfaces.nsIFile);
 return file.path;
}

var a = [
 ['ProfD', 'プロファイルディレクトリ'],
 ['DefProfRt', 'ユーザの (/root/.mozilla など)'],
 ['UChrm', '%profile%/chrome'],
 ['DefRt', '%installation%/defaults'],
 ['PrfDef', '%installation%/defaults/pref'],
 ['ProfDefNoLoc', '%installation%/defaults/profile'],
 ['APlugns', '%installation%/plugins'],
 ['AChrom', '%installation%/chrome'],
 ['ComsD', '%installation%/components'],
 ['CurProcD', '(通常) インストールされたディレクトリ'],
 ['Home', 'OS ルートディレクトリ (/root など)'],
 ['TmpD', 'OS 一時ディレクトリ (/tmp など)'],
 ['ProfLD', 'Windows でのローカル設定; ネットワークキャッシュや fastload ファイルの保管場所'],
 ['resource:app', 'XULRunner アプリケーションでのアプリケーションディレクトリ ']
];

setText('');
for (var i = 0; i < a.length; i++) {
 addText(a[i][0] + ' ' + a[i][1]);
 try {
  addText(getSpecialDir(a[0][i]));
 } catch (e) {
  addText(e);
 }
 addText('');
}
90名無しさん :2013/11/22(金)08:10:11 ID:T26TR5jOj
はーい
間違えてました
addText(getSpecialDir(a[i][0]));
91名無しさん :2013/11/22(金)08:25:06 ID:T26TR5jOj
「あなたの拡張のフォルダーを取得する」はエラーになる

Exception: Components.classes['@mozilla.org/extensions/manager;1'] is undefined
92名無しさん :2013/11/22(金)09:20:28 ID:T26TR5jOj
■テキストファイルを文字列に読み込む
Reading textual data | MDN
https://developer.mozilla.org/ja/docs/Reading_textual_data

function readText(filename, charset) {
 if (!charset) charset = 'UTF-8'; // 'shift_JIS';
 var file = Components.classes["@mozilla.org/file/local;1"]
  .createInstance(Components.interfaces.nsILocalFile);
 file.initWithPath(filename);
 var replacementChar = Components.interfaces.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER;
 var is = Components.classes["@mozilla.org/intl/converter-input-stream;1"]
  .createInstance(Components.interfaces.nsIConverterInputStream);
 var fis = Components.classes["@mozilla.org/network/file-input-stream;1"]
  .createInstance(Components.interfaces.nsIFileInputStream);
 fis.init(file, -1, -1, 0);
 is.init(fis, charset, 1024, replacementChar);
 var str = {}, a = new Array();
 while (is.readString(4096, str) != 0) {
  a.push(str.value);
 }
 return a.join('');
}
 
setText(readText('D:\\FireFoxAddons\\Elements.txt', 'shift_JIS'));
93名無しさん :2013/11/22(金)09:58:13 ID:T26TR5jOj
■文字列をテキストファイルとして書き込む
Writing textual data | MDN
https://developer.mozilla.org/ja/docs/Writing_textual_data

nsIFileOutputStream - XPCOM インタフェースリファレンス | MDN
https://developer.mozilla.org/ja/docs/XPCOM_Interface_Reference/nsIFileOutputStream

function writeText(filename, text, charset) {
 if (!charset) charset = 'UTF-8';
 var file = Components.classes["@mozilla.org/file/local;1"]
  .createInstance(Components.interfaces.nsILocalFile);
 file.initWithPath(filename);
 var fos = Components.classes["@mozilla.org/network/file-output-stream;1"]
  .createInstance(Components.interfaces.nsIFileOutputStream);
 fos.init(file, 0x02 | 0x08 | 0x20, 0664, 0); // write, create, truncate
 var os = Components.classes["@mozilla.org/intl/converter-output-stream;1"]
  .createInstance(Components.interfaces.nsIConverterOutputStream);
 os.init(fos, charset, 0, 0x0000);
 os.writeString(text);
 os.close();
}
 
var s = readText('D:\\FireFoxAddons\\Elements.txt', 'shift_JIS');
writeText('D:\\test.txt', 'new line inserted\n' + s);
setText(readText('D:\\test.txt'));
94名無しさん :2013/11/22(金)10:15:48 ID:T26TR5jOj
SyntaxError: octal literals and octal escape sequences are deprecated
が出るので
fos.init(file, 0x02 | 0x08 | 0x20, parseInt('0664', 8), 0); // write | create | truncate, default permissions
95名無しさん :2013/11/23(土)11:11:31 ID:dQ/M/3RHT
windowが二つになると、グローバル変数も二つになるのか

chrome コードでウィンドウを取り扱う | MDN
https://developer.mozilla.org/ja/docs/Working_with_windows_in_chrome_code
96名無しさん :2013/11/23(土)13:06:57 ID:dQ/M/3RHT
グローバル変数がwindowオブジェクトのメンバ変数になるのか
97名無しさん :2013/11/23(土)19:36:48 ID:dQ/M/3RHT
■ファイル名を指定してスクラッチパッドを開く
mozilla-release: browser/devtools/scratchpad/scratchpad-manager.jsm@66755f89d981
http://hg.mozilla.org/releases/mozilla-release/file/66755f89d981/browser/devtools/scratchpad/scratchpad-manager.jsm
var sp = Scratchpad.ScratchpadManager.openScratchpad({filename: 'd:\\test.txt'});
98名無しさん :2013/11/23(土)19:41:07 ID:dQ/M/3RHT
97は出来なかった
99名無しさん :2013/11/23(土)19:50:05 ID:dQ/M/3RHT
>>92も使ってこれでいけた
でも、なんか嫌だ

var sp = Scratchpad.ScratchpadManager.openScratchpad({
filename: aFileName,
text: readText(aFileName),
});
100名無しさん :2013/11/24(日)09:21:25 ID:00qjEkW5S
mozilla-release: browser/devtools/scratchpad/scratchpad.js@66755f89d981
http://hg.mozilla.org/releases/mozilla-release/file/66755f89d981/browser/devtools/scratchpad/scratchpad.js
のメソッドにアクセスできるオブジェクト

var sp = Scratchpad.ScratchpadManager.openScratchpad(); // これだけではダメで、

function getWindows(windowtype) {
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator);
var enumerator = wm.getEnumerator(windowtype);
var a = new Array();
while(enumerator.hasMoreElements()) {
 a.push(enumerator.getNext());
}
return a;
}

function getScratchpad() {
var a = getWindows('devtools:scratchpad');
return (a && a.length >= 1) ? a[0] : undefined;
}

スクラッチパッド表示後の、getScratchpad().Scratchpad がそれ

新着レスの表示 | ここまで読んだ

名前: mail:





Mozilla Firefox 拡張機能スレッド【お兄ちゃん】
CRITEO