chrome拡張機能は、chrome:// extensions /で明示的に「リロード」をクリックすることなく、拡張機能フォルダーにファイルを保存するたびにリロードするようにします。これは可能ですか?
編集:私はできることを知っています 間隔を更新する Chromeは拡張機能をリロードしますが、これは中途の解決策ですが、エディタ(emacsまたはtextmate)トリガーをオンにしてリロードを保存するか、Chromeにディレクトリの変更を監視するよう要求します。
Chromeでは " Extensions Reloader "を使用できます。
拡張機能のツールバーボタンを使用するか、「 http://reload.extensions "」を参照して、展開されたすべての拡張機能をリロードします
Chrome拡張機能を開発したことがある場合は、拡張機能ページを介さずに、展開した拡張機能を再ロードするプロセスを自動化することができます。
「Extensions Reloader」では、次の2つの方法を使用して、展開されたすべての拡張機能をリロードできます。
1-拡張機能のツールバーボタン。
2-「 http://reload.extensions 」を参照します。
ツールバーアイコンは、ワンクリックで解凍された拡張機能をリロードします。
「参照によるリロード」は、「ビルド後」スクリプトを使用してリロードプロセスを自動化することを目的としています-Chromeを使用して「 http://reload.extensions 」に参照を追加するだけですスクリプトを更新すると、Chromeウィンドウが更新されます。
更新:2015年1月14日現在、拡張機能はオープンソースであり、 GitHubで利用可能 です。
Update:オプションページを追加したので、拡張機能のIDを手動で見つけて編集する必要がなくなりました。 CRX およびソースコードは次のとおりです。 https://github.com/Rob--W/Chrome-Extension-Reloader
更新2:ショートカットが追加されました(Githubのリポジトリを参照)。
基本機能を含む元のコードを以下に示します。
拡張機能を作成し、 Browser Action メソッドと chrome.extension.management
APIを組み合わせて使用して、解凍した拡張機能をリロードします。
以下のコードはChromeにボタンを追加し、クリックすると拡張機能が再ロードされます。
manifest.json
{
"name": "Chrome Extension Reloader",
"version": "1.0",
"manifest_version": 2,
"background": {"scripts": ["bg.js"] },
"browser_action": {
"default_icon": "icon48.png",
"default_title": "Reload extension"
},
"permissions": ["management"]
}
bg.js
var id = "<extension_id here>";
function reloadExtension(id) {
chrome.management.setEnabled(id, false, function() {
chrome.management.setEnabled(id, true);
});
}
chrome.browserAction.onClicked.addListener(function(tab) {
reloadExtension(id);
});
どんな機能やイベントでも
chrome.runtime.reload();
拡張機能をリロードします( docs )。また、manifest.jsonファイルを変更して、以下を追加する必要があります。
...
"permissions": [ "management" , ...]
...
ホットリロードを行う簡単な埋め込み可能なスクリプトを作成しました。
https://github.com/xpl/crx-hotreload
拡張機能のディレクトリでファイルの変更を監視します。変更が検出されると、拡張機能が再ロードされ、アクティブなタブが更新されます(更新されたコンテンツスクリプトを再トリガーするため)。
別の解決策は、カスタムlivereloadスクリプト(extension-reload.js)を作成することです。
// Reload client for Chrome Apps & Extensions.
// The reload client has a compatibility with livereload.
// WARNING: only supports reload command.
var LIVERELOAD_Host = 'localhost:';
var LIVERELOAD_PORT = 35729;
var connection = new WebSocket('ws://' + LIVERELOAD_Host + LIVERELOAD_PORT + '/livereload');
connection.onerror = function (error) {
console.log('reload connection got error:', error);
};
connection.onmessage = function (e) {
if (e.data) {
var data = JSON.parse(e.data);
if (data && data.command === 'reload') {
chrome.runtime.reload();
}
}
};
このスクリプトは、websocketを使用してlivereloadサーバーに接続します。次に、livereloadからのリロードメッセージでchrome.runtime.reload()呼び出しを発行します。次のステップは、このスクリプトを追加して、manifest.jsonでバックグラウンドスクリプトとして実行することです。
注:これは私の解決策ではありません。ただ投稿しています。 Chrome拡張ジェネレーター (すばらしいツール!)の生成コードで見つけました。役立つかもしれないので、ここに投稿しています。
Chrome拡張機能には 許可システム が許可されていない(SOの一部の人々 あなたと同じ問題があった )ので、 「この機能を追加」はIMOで機能しません。 Chromium Extensions Google Groupsからchrome.extension.getViews()
を使用して 提案されたソリューション(理論) のメールがありますが、動作が保証されていません。
manifest.json
いくつかのChrome内部ページにchrome://extensions/
などの内部ページを追加できる場合は、Reload
アンカーと対話するプラグインを作成できます。そして、 XRefresh (Firefoxプラグイン-RubyとWebSocketを使用する Chromeバージョン などの外部プログラムを使用すると、必要なものを実現できます。 :
XRefreshは、選択したフォルダーのファイル変更により現在のWebページを更新するブラウザープラグインです。これにより、お気に入りのHTML/CSSエディターでライブページ編集を行うことができます。
それを行うことはできませんが、この同じ概念を異なる方法で使用できると思います。
代わりに、サードパーティのソリューションを見つけようとすることができます。ファイルに変更を加えた後(Textmateもemacsもわかりませんが、Emacsでは、「ファイルを保存」アクション内でアプリ呼び出しをバインドできます)特定のアプリケーションの特定の座標をクリックします。この場合、開発中の拡張機能からのReload
アンカーです(このリロードのためにChromeウィンドウを開いたままにしておきます)。
(地獄のようにクレイジーですが、うまくいくかもしれません)
次に、ファイルの変更を監視し、変更が検出された場合にリロードするために使用できる機能を示します。 AJAXを介してポーリングし、window.location.reload()を介してリロードすることで機能します。配布パッケージでこれを使用しないでください。
function reloadOnChange(url, checkIntervalMS) {
if (!window.__watchedFiles) {
window.__watchedFiles = {};
}
(function() {
var self = arguments.callee;
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if (__watchedFiles[url] &&
__watchedFiles[url] != xhr.responseText) {
window.location.reload();
} else {
__watchedFiles[url] = xhr.responseText
window.setTimeout(self, checkIntervalMS || 1000);
}
}
};
xhr.open("GET", url, true);
xhr.send();
})();
}
reloadOnChange(chrome.extension.getURL('/myscript.js'));
パーティーに少し遅れているかもしれませんが、 https://chrome.google.com/webstore/detail/chrome-unpacked-extension/fddfkmklefkhanofhlohnkemejcbamln を作成して解決しました
chrome://extensions
イベントがwebsockets経由で受信されるたびに、file.change
ページをリロードすることで機能します。
拡張フォルダー内のファイルの変更時にfile.change
イベントを発行する方法のGulpベースの例は、ここにあります: https://github.com/robin-drexler/chrome-extension-auto-reload -watcher
拡張機能管理APIを使用して拡張機能をリロード/再有効化するのではなく、タブ全体をリロードするのはなぜですか?現在、拡張機能を再度無効にして有効にすると、開いている検査ウィンドウ(コンソールログなど)が閉じます。これは、アクティブな開発中に面倒すぎることがわかりました。
少し遅い答えかもしれませんが、私は crxreload がうまくいくと思います。開発中にリロードオンセーブワークフローを試みた結果です。
HTMLやマニフェストファイルなどのコンテンツファイルは、拡張機能をインストールしないと変更できませんが、拡張機能がパックされるまでJavaScriptファイルは動的にロードされると思います。
Chrome Extensions APIを使用して作業している現在のプロジェクトのために、これを知っています。ページを更新するたびにロードするようです。
リロードするショートカットを使用しています。ファイルを保存するときにいつもリロードしたくない
したがって、私のアプローチは軽量であり、リロード機能はそのままにしておくことができます
manifest.json
{
...
"background": {
"scripts": [
"src/bg/background.js"
],
"persistent": true
},
"commands": {
"Ctrl+M": {
"suggested_key": {
"default": "Ctrl+M",
"mac": "Command+M"
},
"description": "Ctrl+M."
}
},
...
}
src/bg/background.js
chrome.commands.onCommand.addListener((shortcut) => {
console.log('lets reload');
console.log(shortcut);
if(shortcut.includes("+M")) {
chrome.runtime.reload();
}
})
chromeブラウザでCtrl + Mを押して、リロードします
npm init
を使用して、ディレクトリルートにpackage.jsonを作成してから、
npm install --save-dev gulp-open && npm install -g gulp
次にgulpfile.js
を作成します
次のようになります:
/* File: gulpfile.js */
// grab our gulp packages
var gulp = require('gulp'),
open = require('gulp-open');
// create a default task and just log a message
gulp.task('default', ['watch']);
// configure which files to watch and what tasks to use on file changes
gulp.task('watch', function() {
gulp.watch('extensionData/userCode/**/*.js', ['uri']);
});
gulp.task('uri', function(){
gulp.src(__filename)
.pipe(open({uri: "http://reload.extensions"}));
});
これは、CrossRiderを使用して開発している場合に機能します。npmとノードがインストールされていると仮定して、ファイルを監視するパスを変更するのを監視することもできます。
免責事項:私はこの拡張機能を自分で開発しました。
LiveReload互換サーバーに接続して、保存するたびに拡張機能を自動的にリロードします。
ボーナス:あなたの側で少し余分な作業をすることで、拡張機能が変更するウェブページを自動的にリロードすることもできます。
ほとんどのWebページ開発者は、ファイルを自動的にビルドしてサーバーを再起動し、Webサイトをリロードする何らかのウォッチャーを備えたビルドシステムを使用します。
拡張機能の開発は、それほど異なる必要はありません。 Clercは、これと同じ自動化をChrome開発者にもたらします。 LiveReloadサーバーでビルドシステムをセットアップすると、Clercはリロードイベントをリッスンして拡張機能を更新します。
唯一の大きな落とし穴はmanifest.jsonの変更です。マニフェスト内の小さなタイプミスにより、さらにリロードが失敗する可能性があり、拡張機能をアンインストール/再インストールして、変更を再度ロードする必要があります。
Clercは、リロード後にリロードメッセージ全体を拡張機能に転送するため、オプションで提供されたメッセージを使用して、さらに更新手順をトリガーできます。
Webpackを使用して開発している場合、自動リロードプラグインがあります: https://github.com/rubenspgcavalcante/webpack-chrome-extension-reloader
const ChromeExtensionReloader = require('webpack-chrome-extension-reloader');
plugins: [
new ChromeExtensionReloader()
]
Webpack.config.jsを変更したくない場合は、CLIツールも付属しています。
npx wcer
注:(空の)バックグラウンドスクリプトは、リロードコードを挿入する場所なので、必要ない場合でも必要です。
新たに grunt ベースのプロジェクトが見つかりました。このプロジェクトは、ブートストラップ、足場、自動化された前処理機能、および自動リロード(対話の必要なし)を提供します。
Bootstrap Your Chrome Extension from Websecurify
拡張機能を一晩でリロード(更新)したいのですが、これがbackground.jsで使用しているものです。
var d = new Date();
var n = d.getHours();
var untilnight = (n == 0) ? 24*3600000 : (24-n)*3600000;
// refresh after 24 hours if hour = 0 else
// refresh after 24-n hours (that will always be somewhere between 0 and 1 AM)
setTimeout(function() {
location.reload();
}, untilnight);
よろしく、ピーター
Macをお持ちの場合、最も簡単な方法はAlfred Appを使用することです!
PowerpackでAlfred Appを取得し、以下のリンクで提供されるワークフローを追加し、必要なホットキーをカスタマイズします((+⌥+ Rを使用したい)。それで全部です。
これで、ホットキーを使用するたびに、Google Chromeは、その時点でどのアプリケーションに関係なくリロードされます。
他のブラウザを使用する場合は、Alfred Preferences Workflows内でAppleScriptを開き、「Google Chrome」を「Firefox」、「Safari」に置き換えます...
ここでも、ReloadChrome.alfredworkflowファイルで使用される/ usr/bin/osascriptスクリプトの内容を示しますそれで、あなたはそれが何をしているかを見ることができます。
tell application "Google Chrome"
activate
delay 0.5
tell application "System Events" to keystroke "r" using command down
delay 0.5
tell application "System Events" to keystroke tab using command down
end tell
ワークフローファイルは ReloadChrome.alfredworkflow です。
ドキュメントで述べたように、次のコマンドラインはアプリをリロードします
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --load-and-launch-app=[path to the app ]
シェルスクリプトを作成し、gulpからそのファイルを呼び出しました。超シンプル:
var exec = require('child_process').exec;
gulp.task('reload-chrome-build',function(cb){
console.log("reload");
var cmd="./reloadchrome.sh"
exec(cmd,function (err, stdout, stderr) {
console.log("done: "+stdout);
cb(err);
}
);});
スクリプトで必要な監視コマンドを実行し、必要なときにリロードタスクを呼び出します。すっきり、シンプル。
著者は、そのWebpackプラグインの次のバージョンを推奨しました: https://github.com/rubenspgcavalcante/webpack-extension-reloader 。それは私にとって非常にうまく機能します。
@GmonCと@Arik、およびいくつかの空き時間のおかげで、私はなんとかこれを機能させることができました。これを機能させるには、2つのファイルを変更する必要がありました。
(1)そのアプリケーションのLiveReloadおよびChrome Extensionをインストールします。これにより、ファイルの変更時にスクリプトが呼び出されます。
(2)<LiveReloadInstallDir>\Bundled\backend\res\livereload.js
を開きます
(3)行#509
を変更します
this.window.location.href = "http://reload.extensions";
(4)別の拡張機能Extensions Reloader
をインストールします。これには、"http://reload.extensions"
への移動時にすべての開発拡張機能を再ロードする便利なリンクハンドラがあります
(5)この拡張機能のbackground.min.js
をこのように変更します
if((d.installType=="development")&&(d.enabled==true)&&(d.name!="Extensions Reloader"))
と置換する
if((d.installType=="development")&&(d.enabled==true)&&(d.name!="Extensions Reloader")&&(d.name!="LiveReload"))
LiveReloadアプリケーションを開き、Extension Reloaderボタンを非表示にし、ツールバーのボタンをクリックしてLiveReload拡張機能をアクティブにします。LiveReloadのその他すべての機能(css reload、image reloadなど)を使用しながら、ファイルを変更するたびにページと拡張機能をリロードします
これの悪い点は、拡張機能の更新ごとにスクリプトを変更する手順を繰り返す必要があることです。更新を回避するには、拡張機能を解凍済みとして追加します。
これをいじる時間があるなら、これらの拡張機能の両方の必要性を排除する拡張機能を作成するでしょう。
それまでは、拡張機能で作業しています Projext Axeman
LiveJS をフォークして、パッケージ化されたアプリのライブリロードを可能にしました。ファイルをアプリに含めるだけで、ファイルを保存するたびにアプリが自動再読み込みされます。
これは、AutoItや代替品などのソフトウェアが輝く場所です。重要なのは、現在のテスト段階をエミュレートするスクリプトを書くことです。多くのテクノロジーには明確なワークフロー/テストパスが備わっていないため、少なくとも1つを使用することに慣れてください。
Run("c:\Program Files (x86)\Google\Chrome\Application\chrome.exe")
WinWaitActive("New Tab - Google Chrome")
Send("^l")
Send("chrome://extensions{ENTER}")
WinWaitActive("Extensions - Google Chrome")
Send("{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}")
Send("{ENTER}")
WinWaitActive("Extensions - Google Chrome")
Send("{TAB}{TAB}")
Send("{ENTER}")
WinWaitActive("Developer Tools")
Send("^`")
明らかに、テスト/反復のニーズに合わせてコードを変更します。 chrome:// extensionsサイトのアンカータグがある場所でタブクリックが正しいことを確認します。また、ウィンドウのマウスの動きやその他のマクロに関連して使用することもできます。
次のような方法でVimにスクリプトを追加します。
map <leader>A :w<CR>:!{input autoit loader exe here} "{input script location here}"<CR>
これは、Vimを使用しているときに、リーダーボタンと呼ばれるENTER(通常は|および\)の上にあるボタンを押し、それに続けて大文字の「A」を押すと、テストフェーズスクリプトが保存されて開始されることを意味します。
上記のVim/hotkeyスクリプトの{input ...}セクションに適切に記入してください。
多くのエディターでは、ホットキーを使用して同様のことができます。
Windowsの場合:AutoHotkey
Linuxの場合:xdotool、xbindkeys
Macの場合:Automator
私は主にFirefoxで開発し、web-ext run
はファイルの変更後に拡張機能を自動的にリロードします。その後、準備ができたら、Chromeで最後のテストを行い、Firefoxで発生しなかった問題がないことを確認します。
ただし、主にChromeで開発し、サードパーティの拡張機能をインストールしたくない場合は、拡張機能のフォルダーにtest.html
ファイルを作成し、多数の SSCCE's それに。そのファイルは、通常の<script>
タグを使用して拡張スクリプトを挿入します。
テストの95%でそれを使用し、ライブサイトでテストする場合は拡張機能を手動でリロードできます。
これは、拡張機能が実行される環境を同じように再現するわけではありませんが、多くの単純なことには十分です。