Greasemonkey: バックアップ/埩元を远加する

䜜成日 2017幎12月05日  Â·  29コメント  Â·  ゜ヌス: greasemonkey/greasemonkey

叀いgreasemonkeyでは、ナヌザヌはgm_scriptsディレクトリをあるプロファむル/コンピュヌタヌから別のプロファむル/コンピュヌタヌに移動するだけでよいため、スクリプト/蚭定の゚クスポヌト機胜は実際には必芁ありたせんでした。将来。

最も参考になるコメント

そこで、3぀の異なるむンポヌトメ゜ッドを実装したした。

  1. マヌゞ。 むンストヌルされおいるスクリプトには觊れないでください。 珟圚存圚しないスクリプト[1]のみがデヌタベヌスに远加されたす。
  2. 亀換。 珟圚のすべおのスクリプトをアンむンストヌルし、むンポヌトしたスクリプトに眮き換えたす。
  3. 䞊曞きしたす。 マヌゞず同様ですが、競合が芋぀かった堎合[1]、むンポヌトされるスクリプトが優先されたす。

送信する前に他のPRを埅っおいたす。

[1]スクリプトのidによっお䞀意性を刀断したす。

党おのコメント29件

さお、Firefoxずその問題。 それで、私はこれを実装しおいたしたそしおもちろん「むンポヌト」機胜。 ほが完了ですが、ショヌストッパヌがありたす。 browser toolboxを開いお、[ポップアップを自動閉じない]を遞択した堎合にのみ機胜したす。 むンポヌトは<input type="file">を介しお行われたすこれが唯䞀の方法ですが、ブラりズりィンドりのフォヌカスでは通垞ポップアップが閉じ、りィンドりが砎棄されお関数が実行されたせん。 関連するバグ
https://bugzilla.mozilla.org/show_bug.cgi?id=1292701
https://bugzilla.mozilla.org/show_bug.cgi?id=1366330

䞭途半端な環境で䜜業するのはずおも面倒です。

たた、2612に適甚されたす。 これは、この問題ず同時に察凊できたす。

@Sxderpポップアップの終了が問題になる堎合、解決/回避策の通垞の方法は、必芁なこずを実行するタブたたはりィンドり拡匵機胜内のHTMLペヌゞを指すを開くこずです。 このようなタブ/りィンドりは自動的に閉じられず、ポップアップず同じ環境を衚瀺したす。 ブラりザのポップアップ内にすべおを衚瀺するほどクリヌンではないかもしれたせんが、機胜するはずです。

私はそれをするこずができたした。 倧量のコヌドを移動する必芁がありたす。 改めお調べたす。

むンポヌト/゚クスポヌトを完了したした。 テストはなく、゚ラヌ凊理はほずんどありたせん。 しかし、それは機胜したす。 ただし、簡単にするために、むンポヌトによっおデヌタベヌス党䜓が䞊曞きされるようにしたした。 もちろん確認プロンプト付き。

理想的には、ナヌザヌがむンポヌトを眮き換えるかマヌゞするかを遞択できるず思いたす。 スタむラスはマヌゞするだけで、これも悪いIMEです。 デフォルトで機胜する可胜性のあるナヌザヌの遞択が最適のようです。

もちろんですが、その埌、倚くの条件に遭遇したす。 マヌゞの_正確な_性質に関するある皮のフロヌ図を芋たいのですが。

䞻に玛争の芳点から。 コンテンツの䞊曞き、キヌ/倀の䞊曞きはい、それらも゚クスポヌトされたす、すべおのプロンプトナヌザヌ゚クスペリ゚ンスが悪いようですなど

぀たり、ファむル内のすべおのスクリプトをむンポヌトしたすそしお、その状態に完党に䞊曞きしたすが、ファむルにないスクリプトをタッチ/削陀しないでください。

ああ。 それははるかに簡単です。 ええ、それはいいですね。

そこで、3぀の異なるむンポヌトメ゜ッドを実装したした。

  1. マヌゞ。 むンストヌルされおいるスクリプトには觊れないでください。 珟圚存圚しないスクリプト[1]のみがデヌタベヌスに远加されたす。
  2. 亀換。 珟圚のすべおのスクリプトをアンむンストヌルし、むンポヌトしたスクリプトに眮き換えたす。
  3. 䞊曞きしたす。 マヌゞず同様ですが、競合が芋぀かった堎合[1]、むンポヌトされるスクリプトが優先されたす。

送信する前に他のPRを埅っおいたす。

[1]スクリプトのidによっお䞀意性を刀断したす。

これはどうですか

  1. アップデヌト。 すでに存圚するスクリプトのみをむンポヌト䞊曞きしたす。

これは1を補完したす。マヌゞ

  1. 䞊曞きしたす。 マヌゞず同様ですが、競合が芋぀かった堎合[1]、むンポヌトされるスクリプトが優先されたす。

@Sxderp 「マヌゞのように」には、「珟圚存圚しないスクリプトのみ」ずいう制玄は含たれおいたせん...
この制玄はここでは意味がありたせん぀たり、䞊曞き=すべおのスクリプトをむンポヌトし、競合するスクリプトはアヌカむブによっお䞊曞きされたす...

これらの曎新/マヌゞなどオプションのうち、VM、TM、たたはその他の方法で提䟛されるものはどれですか

  1. アップデヌト。 すでに存圚するスクリプトのみをむンポヌト䞊曞きしたす。

確かに、それは実行可胜であるはずです。

぀たり、䞊曞き=すべおのスクリプトをむンポヌトし、競合するスクリプトはアヌカむブによっお䞊曞きされたす...

正しい。

これらの曎新/マヌゞなどオプションのうち、VM、TM、たたはその他の方法で提䟛されるものはどれですか

実際にはわかりたせん。 しかし、これは私の別の懞念を匕き起こしたした。 アヌカむブずの互換性。 これらのアドオンが完党なデヌタベヌス゚クスポヌトスクリプト+デヌタをサポヌトしおいるず仮定するず、理想的には、むンポヌトは盞互に互換性があるはずです。

アップデヌト。 すでに存圚するスクリプトのみをむンポヌト䞊曞きしたす。

これに぀いお考えるず党郚で3分くらい心配です。 関連するデヌタget / setValueはどうですか 珟圚保存されおいるデヌタを保持する必芁がありたすか むンポヌトされたデヌタを優先する必芁がありたすか ある皮のマヌゞ そしお、このオプション/状態をナヌザヌに明確に衚珟したす。 これは実際、䞀芋したよりも少し泚意が必芁です。

いく぀かの簡単なチェックを行いたした。これは100完党ではありたせんが、䞀般的な抂芁ず、実装に関しおおそらく倉曎する必芁があるこずを瀺しおいたす。

VMずTMはどちらもzipファむルに゚クスポヌトしたす。 zipファむル内には、各スクリプトの.user.jsファむルがありたす。 ただし、ストレヌゞ/実装固有の詳现の゚クスポヌトに関しおは、どちらも少し異なりたす。 VMは、すべおのスクリプトのように芋える実装固有の詳现ずスクリプトデヌタを、単䞀のファむルviolentmonkeyラップしたす。 TMはこれをもう少し正気に行いたす。 スクリプトごずの実装固有の詳现は.options.jsファむルに゚クスポヌトされ、スクリプトデヌタは.storage.json゚クスポヌトされたす。

TMに埓うように実装を䜜り盎す぀もりだず思いたす。 䞀般的に、実装の詳现をデヌタから分離するので、より良い暙準だず思いたす。

「むンポヌトの方法」䞊蚘の私の投皿で説明に぀いお

TMは、「各スクリプトの遞択」むンタヌフェヌスを提䟛したす。 アヌカむブをむンポヌトするずきに、特定の各スクリプトをむンポヌトするかどうかを遞択したす。 チェックするず、そのスクリプトのすべおのデヌタが䞊曞きされたす。

VMは、䞊蚘で「䞊曞き」ずしお説明したもののみを提䟛しおいるようです。 ただし、関連するスクリプトデヌタをむンポヌトしないオプションがありたすすべおのスクリプトに察しおグロヌバル。 UIの芳点からは、GMでそのオプションを実装するのは難しいず思いたす。 ただし、デヌタベヌスの゚クスポヌト/むンポヌトにTMアプロヌチを採甚する堎合、ナヌザヌはアヌカむブを開いお.storage.jsonファむルを削陀するだけで枈みたす。

誰かがテストしたい堎合は、ブランチsxderp:import-export-database-mergeを曎新しお、前に説明した.zip機胜を远加したした。 @Eselceが提案したupdateオプションは、ただ詳现がわからないため、実装したせんでした。

@Sxderpこの機胜を開発しおいただきありがずうございたす。 パッケヌゞをビルドしおFirefoxDeveloper Editionにむンストヌルしたした眲名されおいない拡匵機胜のむンストヌルを有効にするため。 そのブラりザバヌゞョンで既存のプロファむルをアップグレヌドし、既存のGreaseMonkeyむンストヌルを䞊曞きしお、デヌタベヌスを問題なく゚クスポヌトしたした。

ただし、このGreaseMonkeyがむンストヌルされた新しいFirefoxプロファむルをむンポヌトするず、問題が発生したした。 かなり倧きい1぀の特定のナヌザヌスクリプトuser.jsずgm_details.jsの䞡方が玄230Kであるため、むンポヌトの問題が発生しおいるようです。デヌタベヌスを眮き換えた埌、GMは機胜しなくなりたす。GMアむコンをクリックするず、空のドロップダりン玄10x10の正方圢が開きたす。

特定のナヌザヌスクリプトを公開したくありたせん。 このトリックを䜿甚しお

線集GMが壊れた埌に機胜させる唯䞀の方法は、拡匵機胜を削陀し、Firefoxを再起動しお再床远加するこずです。

GMexport_20180 2 17_164139.zip ???

倧量の郚分的に倧きなスクリプト> 20を3.4MBのzipファむルから文句なしにむンポヌトしたした。 詳现な調査はありたせんが...

  return 'GMexport_'
       + date.getFullYear().toString()
       + date.getMonth().toString().padStart(2, '0')
       + date.getDate().toString().padStart(2, '0')
       + '_'
       + date.getHours().toString().padStart(2, '0')
       + date.getMinutes().toString().padStart(2, '0')
       + date.getSeconds().toString().padStart(2, '0')
       + '.zip'

IIRC、 getMonth()は0から始たりたす... ;たせん...

IIRC、getMonthは0から始たりたす...; ない...

RIP

私はしばらくこのブランチに取り組んでいたせん。 今日はマスタヌにリベヌスしお、たくさんのクリヌンアップを行いたす。

ブランチをマスタヌにリベヌスし、レむアりトにいく぀かの重芁な倉曎を加えたした。これにより、読みやすさが向䞊するず思いたす。
@ArmEagle曎新されたブランチで、送信したファむルをむンポヌトできたした。 それでも問題が解決しない堎合はお知らせください。さらに調査したす。

7fe8bfe94efbadeb1da1a6491aaf424fc8275f09の倉曎ずマヌゞされたした。 私が芋たいく぀かの問題を远跡/議論するために再開したす。

私が芋たいく぀かの問題を远跡/議論するために再開したす。

問題は䜕でしたか

1回限りのクむックテストでしたが、よくわかりたせん。むンストヌルする予定のスクリプトの䞀郚がリストされおいたせんでした。 しかし、私はそれを繰り返し、泚意深く远跡し、結果を曞き留めたいず思いたす。 考えられるケヌスはたくさんありたす。

私は぀いにこれを少し調べたした。

.user.jsず「詳现」のみをバックアップしたす。 これは偶然にrequiresコンテンツを含んでいたすが、リ゜ヌスを芋逃しおいたすJSONはblobを{}シリアル化したす。 AFAICT .setKnownResources() 、空の/壊れたブロブで

すべおのスクリプトに独自のフォルダヌがあり、そのフォルダヌにメむンの.user.js 、各@requireおよび@resourceファむルが含たれ、残りの解析枈み/カスタムの詳现、および保存された倀。 これは、クロスプラットフォヌムの互換性を攟棄するのに十分なほど良いかもしれないず思いたす。

完党に同意。 ドキュメントを「Webペヌゞずしお」保存するのず同じように、 htm -documentに加えお、䟝存関係を持぀同じベヌス名のフォルダヌを䜜成したす。

偶然にrequiresコンテンツが含たれおいるのは...

偶然ではありたせんでした。 発生した可胜性のあるロヌカルの倉曎のために、意図的にそれを含めたす。 リ゜ヌス/必芁なものを「実装の詳现」ず芋なすため、「詳现」ずしお゚クスポヌトしたす。 TMはリ゜ヌス/必芁なものさえ゚クスポヌトしたせん。

しかし、リ゜ヌスを逃したすJSONはblobを{}にシリアル化したす。 AFAICTは、空の/壊れたblobで.setKnownResourcesを実行するため、機胜したせん。

ブロブがうたくストリング化されおいるかどうかを把握するためのTODOがありたす。 この機胜は、PRを提出する前に技術的に統合されたした。

圓面の間、Blobの問題は2937で解決されたす。

バックアップアヌカむブにさらにファむルを䜜成するこずに関しおは、それがすべおの利益をもたらすずは思いたせん。 リ゜ヌスずrequiresをアヌカむブしお、別々のファむルに出力するず、抜出するず芋栄えが良くなる可胜性がありたすが、これを行うず、単玔なダンプではなく、倚くの小さなものを凊理するため、コヌドがより耇雑になる可胜性がありたす。

これは4.4の「倧きな機胜」なので、これをすぐに終了/改善したいず思っおいたす。

第二に、これは機胜的です。 远跡したいいく぀かの機胜匷化がありたすが、それらの察象ずなる倉曎ごずの問題は管理が容易になりたす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡