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

Firefox Mozillaでプログラミング(XUL)

※ID非表示スレ
1名無しさん@おーぷん:2015/03/31(火)21:09:11 ID:???
Firefoxの拡張、アドオン(addon)、改造について
XUL や XPCOM を使ったプログラミングについて
関連情報は >>1-10
56名無しさん@おーぷん :2016/03/21(月)21:16:08 ID:???
\extensions\ フォルダに、
borderify@mozilla.org
ってファイルを作って、
maniest.jsonファイルの場所を書けば
Firefox起動時に自動的に読み込まれた。

署名必須になったら出来ないっぽい
57名無しさん@おーぷん :2016/03/22(火)03:35:39 ID:???
>>56の手動インストールのことが書いてないんだよな
んー

パッケージ化とインストール
https://developer.mozilla.org/ja/Add-ons/WebExtensions/Packaging_and_installation#%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%81%8B%E3%82%89%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%80
この記事では、WebExtension を Firefox にインストールする方法を 2 つ紹介します。

ディスクから読み込む: アドオンの開発中にテストしたい場合に最も簡単な方法です。

パッケージ化してインストールする: この方法を用いると、アドオンをインストール可能なファイルにパッケージ化し、
Firefox へ永続的にインストールさせることができます。
58名無しさん@おーぷん :2016/03/22(火)20:41:46 ID:???
クリップボードへのコピーはこれでも出来るらしい

document.execCommand
https://developer.mozilla.org/ja/docs/Web/API/Document/execCommand
59名無しさん@おーぷん :2016/03/22(火)22:03:52 ID:???
いつ廃止かまだ決まってないのか

WebExtensions
https://developer.mozilla.org/ja/Add-ons/WebExtensions
>XUL と XPCOM ベースのアドオンは廃止される予定になっています。そのため、
>新しくアドオンを作成する開発者の方には WebExtension API の使用を推奨しています。
60名無しさん@おーぷん :2016/03/23(水)18:20:29 ID:???
"matches": ["*://*.mozilla.org/*"],

"matches": ["*://*.open2ch.net/*"],

で open2chでも赤枠が出た
コメントアウトが無いのは不便
jsonファイルで設定は失敗やろ
61名無しさん@おーぷん :2016/03/23(水)18:53:54 ID:???
ローカルファイルと全サイトはこれ
"matches": ["file:///*:/*", "*://*/*"],


"matches": ["*:///*:/*", "*://*/*"],
でもいけそうな気がするけどダメだった
62名無しさん@おーぷん :2016/03/23(水)19:11:49 ID:???
試してないが、こうやれば別サイトから読み込めるっぽい

Cross-Origin XMLHttpRequest - Google Chrome
https://developer.chrome.com/extensions/xhr

"permissions": [
"http://*.open2ch.net/"
],
63名無しさん@おーぷん :2016/03/23(水)19:16:57 ID:???
WebExtensionの中身
https://developer.mozilla.org/ja/Add-ons/WebExtensions/Anatomy_of_a_WebExtension
background scriptは、拡張機能が読み込まれてからすぐにロードされ、
無効になるかアンインストールされるまでの間ずっとロードされたままになります。

"background": {
 "scripts": ["background-script.js"]
}
64名無しさん@おーぷん :2016/03/23(水)19:43:07 ID:???
タイマーの代わりに alarm を使うらしい

Event Pages - Google Chrome
https://developer.chrome.com/extensions/event_pages
If your extension uses window.setTimeout()
or window.setInterval(), switch to using
the alarms API instead. DOM-based timers
won't be honored if the event page shuts down.
65名無しさん@おーぷん :2016/03/24(木)10:21:49 ID:???
Match patterns
https://developer.mozilla.org/ja/Add-ons/WebExtensions/Match_patterns

 "content_scripts": [
  {
   "matches": ["<all_urls>"],
   "js": ["content-script.js"]
  }
 ],
 
66名無しさん@おーぷん :2016/03/24(木)10:29:53 ID:???
デバッグ
https://developer.mozilla.org/ja/Add-ons/WebExtensions/%E3%83%87%E3%83%90%E3%83%83%E3%82%B0

>バックグラウンドスクリプトがメッセージを受け取ると、リンクを含んだ通知画面が表示されます。
これが起きない。

ブラウザコンソールには content script sending message だけ。

ソースは上のリンク先からちょっと変更されてる
webextensions-examples/notify-link-clicks-i18n at master · mdn/webextensions-examples · GitHub
https://github.com/mdn/webextensions-examples/tree/master/notify-link-clicks-i18n
67名無しさん@おーぷん :2016/03/24(木)10:52:18 ID:???
ロケールで文句言われるから、こんな風に使わないようにしたら、
インストールに失敗するようだ

"zzz_default_locale": "ja",
68名無しさん@おーぷん :2016/03/24(木)10:55:32 ID:???
うーむ、今やったらインストールできた
何か別の条件がいるみたい
69名無しさん@おーぷん :2016/03/24(木)15:46:53 ID:???
まだbackgroundはサポートされていないってことか?
何も起きないからそういうことにしておこう

permissions
https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/permissions
Chrome incompatibilities

Firefox does not yet support the following
permissions:
background
70名無しさん@おーぷん :2016/03/24(木)18:49:28 ID:???
xul ウィンドウを open() した直後では、
xulファイルで独自に宣言した関数や変数は使えないようになったか?
onload 内なら使えるけど。


71名無しさん@おーぷん :2016/03/24(木)18:56:34 ID:???
{
 "manifest_version": 2,
 "name": "Open2ch Web Extension",
 "version": "1.0",
 "description": "Open2ch Web Extension",

 "applications": {
  "gecko": {
   "id": "open2ch@ne.jp",
   "strict_min_version": "45.0.0"
  }
 },

 "content_scripts": [
  {
   "matches": ["*://*.open2ch.net/*", "*://open2ch.net/*"],
   "js": ["headline.js"]
  }
 ],

 "__ZZZ": "end"
}
72名無しさん@おーぷん :2016/03/24(木)18:57:50 ID:???
こんなんでやってみた
フレームでヘッドラインを表示した場合は出なかった

// headline.js

console.log("headline.js begin");
73名無しさん@おーぷん :2016/03/24(木)19:00:41 ID:???
フレームの上位ファイルを含めなたらいけた

"matches": ["file:///E:/open2ch/*", "*://*.open2ch.net/*", "*://open2ch.net/*"],
74名無しさん@おーぷん :2016/03/24(木)19:04:13 ID:???
フレームのローカルファイルの場所なんて人によって違う
すべてのローカルファイルでjsを実行するのも無駄だし
75名無しさん@おーぷん :2016/03/24(木)22:09:56 ID:???
ちゃんとタイマ動いた
タブを閉じたら時間の追加も止まった

"content_scripts": [
{
"matches": ["*://*.open2ch.net/*"],
"js": ["timertest.js"]
}
]

console.log("timertest.js begin")

var id = setInterval(function() {
console.log((new Date()).toLocaleTimeString());
}, 2000);

console.log("timertest.js end")
76名無しさん@おーぷん :2016/03/24(木)22:10:06 ID:???
"*://*.open2ch.net/*" で http://open2ch.net/ も含まれる。

Match patterns
https://developer.mozilla.org/ja/Add-ons/WebExtensions/Match_patterns#%E4%BE%8B
77名無しさん@おーぷん :2016/03/24(木)22:16:18 ID:???
console.dir(this);
でちゃんと出たぞ

78名無しさん@おーぷん :2016/03/24(木)22:47:20 ID:???
this.content が 普通の window オブジェクト(scratchpad での実行環境がWebページの時のthis)っぽい
79名無しさん@おーぷん :2016/03/25(金)02:09:48 ID:???
>>76 だと、
>"*://*.open2ch.net/*" で http://open2ch.net/ も含まれる。

http://toro.open2ch.net/ は含めるけど、
http://open2ch.net/ は含めない場合はどう書くのだろう?
80名無しさん@おーぷん :2016/03/25(金)03:26:04 ID:???
1分毎にヘッドラインをリロードして、
スレタイに"産経"って文字列が含まれていたら、
スレタイをタイトルに設定。
リロード時にフォーカスを失うことがあるみたい。

 "content_scripts": [
  {
   "matches": ["*://*.open2ch.net/*"],
   "js": ["headline.js"]
  }
 ],

var find_keyword = "産経";
var tables = document.getElementsByTagName("table");
var ts = tables[tables.length - 1].getElementsByTagName("t");
for (var i = 0; i < ts.length; i++) {
 if (ts[i].textContent.includes(find_keyword)) {
  document.title = '!' + ts[i].textContent;
  break;
 }
}

setTimeout(function() {
 //console.log((new Date()).toLocaleTimeString() +": " + document.URL);
 location.reload();
}, 1 * 60 * 1000);
81名無しさん@おーぷん :2016/03/25(金)03:27:01 ID:???
ヘッドラインだからこうか

   "matches": ["*://*.open2ch.net/headline.cgi"],
82名無しさん@おーぷん :2016/03/25(金)17:40:00 ID:???
どんなセンスだ?

alarms.create()
https://developer.mozilla.org/ja/Add-ons/WebExtensions/API/Alarms/create

when アラームが最初に発火する時刻を 1970 年 1 月 1 日からの経過ミリ秒 で指定します。
delayInMinutesOptional アラームが最初に発火する時刻を、アラーム設定時から何分後かで指定します。
83名無しさん@おーぷん :2016/06/10(金)12:21:07 ID:???
WebExtensionsを試してみたけど、downloads APIでBlob URLを使えないんだな
84名無しさん@おーぷん :2016/08/01(月)23:39:25 ID:???
>>83
Firefox 49でできるようになるみたい
https://blog.mozilla.org/addons/2016/06/09/webextensions-for-firefox-49/
85名無しさん@おーぷん :2016/08/11(木)01:19:46 ID:???
Applicationオブジェクトを使わないFirefoxの再起動

Miscellaneous
https://developer.mozilla.org/en-US/Add-ons/Code_snippets/Miscellaneous#Restarting_Firefox.2FThunderbird.2FSuiteRunner

Services.startup.quit(Services.startup.eForceQuit|Services.startup.eRestart);
86名無しさん@おーぷん :2016/10/15(土)13:25:00 ID:???
test
87名無しさん@おーぷん :2016/10/28(金)16:18:56 ID:???
// -sp-context: browser

const Cu = Components.utils;
Cu.import("resource://gre/modules/AppConstants.jsm");

console.dir(AppConstants);



AppConstants.platform == "linux"
AppConstants.platform == "win"

でプラットフォームを判別する
88名無しさん@おーぷん :2016/11/26(土)08:44:07 ID:???
デスクトップ版Firefox 57で拡張機能はWebExtensionsベースに限定化
http://rockridge.hatenablog.com/entry/2016/11/25/004343

> 今からちょうど1年後には、レガシー拡張機能と完全テーマがことごとく機能を停止することになる。
89名無しさん@おーぷん :2016/11/26(土)14:39:45 ID:???
>>88
つまり>>7ら辺が余命一年ってことか…。
90名無しさん@おーぷん :2017/08/30(水)07:06:03 ID:???
about:addons で「旧式」の表示が出るようになってるな
後二ヶ月ぐらいでこれらが使えなくなると
91名無しさん@おーぷん :2017/10/05(木)04:18:45 ID:???
デスクトップ版Firefox 57で拡張機能はWebExtensionsベースに限定化 - Mozilla Flux
http://rockridge.hatenablog.com/entry/2016/11/25/004343
>レガシー拡張機能を使い続けるためFirefox ESR 52に乗り換える手もあるが、
>こちらも2018年6月中にはサポートが切れる。
92名無しさん@おーぷん :2017/10/05(木)04:29:14 ID:???
JavaScript API 群のブラウザ実装状況
https://developer.mozilla.org/ja/Add-ons/WebExtensions/Browser_support_for_JavaScript_APIs

GitHub - mdn/webextensions-examples: Example Firefox add-ons created using the WebExtensions API
https://github.com/mdn/webextensions-examples
93名無しさん@おーぷん :2017/10/12(木)21:17:59 ID:???
console.dir(gBrowser.contentDocument);
が無くなってて、
console.dir(gBrowser.mCurrentBrowser);
があった
94名無しさん@おーぷん :2017/10/12(木)21:29:45 ID:???
検索したらだいぶ前からだった

こんなふうにするのか

var iframeDocument = document.getElementsByTagName("iframe")[0].contentDocument;

console.dir(iframeDocument);
95名無しさん@おーぷん :2017/10/13(金)01:23:46 ID:???
"commands": {
"toggle-feature": {
"suggested_key": { "default": "F2" },
"description": "Copy title and url to clipboard"
}
}

F2だと There was an error during installation: Extension is invalid
どこが間違ってるのかまったく分からないわ

"suggested_key": { "default": "Ctrl+Shift+U" },
96名無しさん@おーぷん :2017/10/13(金)12:47:34 ID:???
このファイルには以下のキーを必ず含める必要があります。
applications Gecko でのみサポート。
manifest_version
name
version
97名無しさん@おーぷん :2017/10/13(金)12:57:33 ID:???
Firefox 47 以前では applications キーを追加する必要があります。
98名無しさん@おーぷん :2017/10/13(金)13:12:09 ID:???
F1〜F12 は Firefox53からサポート
99名無しさん@おーぷん :2017/10/13(金)20:15:24 ID:???
表示できた

{
"name": "all_urls",
"version": "1.0",
"manifest_version": 2,
"content_scripts": [
{ "matches": ["<all_urls>"], "js": ["content.js"] }
]
}

console.log('loaded: ' + document.location);

100名無しさん@おーぷん :2017/10/13(金)21:01:22 ID:???
F2キーでタイトルとURLを取得できた
Firefox Mozillaでプログラミング(XUL)
http://toro.open2ch.net/test/read.cgi/tech/1427803751/99-
{
"manifest_version": 2,
"name": "Clipboard",
"version": "1.0",
"permissions": ["clipboardWrite"],
"content_scripts": [{"matches": ["<all_urls>"], "js": ["clipboard.js"]}]
}
/*
keydown - Event reference | MDN
https://developer.mozilla.org/en-US/docs/Web/Events/keydown
*/
function copyText(text){
var ta = document.createElement("textarea");
ta.value = text;
document.body.appendChild(ta);
ta.select();
document.execCommand("copy");
ta.parentElement.removeChild(ta);
}
function keydown(event) {
/*
console.log('keydown: ' +
'char=' + event.char + '; ' +
'key=' + event.key + '; ' +
'charCode=' + event.charCode + '; ' +
'keyCode=' + event.keyCode + ';');
*/
if (!event.altKey && !event.ctrlKey && !event.shiftKey && !event.metaKey) {
if (event.key == "F2") {
copyText(document.title + '\n' + document.location + '\n');
}
}
}
addEventListener("keydown", keydown, true);
101名無しさん@おーぷん :2017/10/14(土)22:12:23 ID:???
使えなくなったらしい
>>94のやり方でもダメ
shimはよくわからない

Limitations of chrome scripts - Mozilla | MDN
https://developer.mozilla.org/ja/Firefox/Multiprocess_Firefox/Limitations_of_chrome_scripts#gBrowser.contentWindow_window.content...

All APIs in the chrome process that provide direct access to content objects will no longer work. For example:

// chrome code

gBrowser.contentWindow; // null

gBrowser.contentDocument; // null

gBrowser.selectedBrowser.contentWindow; // null

window.content; // null

content; // null
102名無しさん@おーぷん :2017/11/14(火)22:40:15 ID:???
拡張機能の自動更新でデータが消えてた
破壊的な更新まで自動で行ってしまうのは困るな
103名無しさん@おーぷん :2017/11/14(火)23:24:19 ID:???
ついにFirefoxの更新が来て昔の拡張が使えなくなった
まだ新形式のAPIが不十分だし、一部のページで全ての拡張機能が無効になったりして色々面倒だな
104名無しさん@おーぷん :2017/11/20(月)15:29:10 ID:???
Rustなのか

ブラウザ『Firefox』の最新バージョンで使えないアドオン続出! 高速化と引き換えにアドオンの互換性が犠牲に | ゴゴ通信
http://gogotsu.com/archives/34751
>この新Firefoxはブラウザエンジンをイチから作り直し処理速度を2倍にまで引き上げたという。
>Mozilllaは「Rust」と呼ばれる独自のプログラミング言語を開発し、
105名無しさん@おーぷん :2018/05/30(水)09:41:07 ID:???
拡張でもES modulesを使えるらしい
ただし、content scriptだとweb_accessible_resourceを使うため、拡張機能のAPIを参照できなくなる

ES6 modules in chrome extensions — An introduction
https://medium.com/front-end-hacking/es6-modules-in-chrome-extensions-an-introduction-313b3fce955b

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

名前: mail:





Firefox Mozillaでプログラミング(XUL)
CRITEO