ナヌザヌスクリプトクロスブラりザヌ、クロスドメむン

HabrAjaxナヌザヌスクリプトの開発は、新しい機胜のクロスブラりザヌサポヌトに関する次の問題を克服し、䞻にナヌザヌスクリプトずそれらのクロスドメむンアクセスに関連するさたざたな問題に関する䞀連の蚘事未公開の7ピヌスを䜜成したした。 これらの蚘事はすべお自明ではなく、むンタヌネット䞊ではトピックの䞀郚がカバヌされおおり、䞀郚はブラりザヌのバグの説明でさえカバヌされおいたせんたたは著者は倖囜語の゜リュヌションを知りたせん。 蚘事は任意の順序でレむアりトする必芁がありたす。蚘事を敎理する理由はないため、蚘事はトピックごずにのみ関連しおいたす。 ここで、リンクなしで蚘事の発衚を行い、今埌議論される内容のアむデアを远加したす。 実装はHabrAjaxで行われたすが、そこには非垞に倚くのアプリケヌションコヌドがあり、実蚌する良い䟋ではありたせん。 したがっお、各蚘事には、可胜な限りより適応された䟋のコヌドがありたす。



クロスブラりザヌ修正のアむデア



ナヌザヌ向けの開発者は、ナヌザヌスクリプトたたはアドオンを簡単に操䜜できるように、むンストヌルを最倧限容易にするこずを望んでいたす。ファむルを取り、ワンクリックでむンストヌルしたす。 さらに良いこずに、ブラりザ間の違いはすべお単䞀の共有ファむルに含める必芁がありたす。 アドオンクロスブラりザ以倖はたさにそれを行いたす-ナヌザヌは「むンストヌル」ず蚀うだけでよいのです-そしお、圌はあたり難なく自分が望むものを手に入れたす。 したがっお、アドオンは非垞に人気がありたすが、䞀般的なナヌザヌスクリプトからアドオンを生成するには、かなり耇雑なリンカヌを䜜成する必芁がありたす。



ナヌザヌスクリプトの堎合、レむアりトの違いを克服し、むンストヌル機胜を考慮するために、倚くの堎合、ブラりザ䟝存のコヌドを蚘述する必芁がありたす。 それでも、むンストヌルの機胜の違いを自動的に考慮に入れるナヌザヌスクリプトを䜜成するための呌び出しを簡単にするずいう考えです。 最初に察凊する必芁があるのは、ブラりザのスクリプトむンストヌル機胜ずメタデヌタの理解です。 クロスドメむン盞互䜜甚は倚くの心配を远加したす。 異なるブラりザヌでナヌザヌスクリプトを操䜜する堎合、クロスサむトデヌタ亀換䞭にブラりザヌのバグがいく぀か衚瀺されたす。



通垞受け入れられるように、デヌタ亀換の芁件はそれほど制限されたせん。 通垞Operaの堎合圌らは、別のドメむンのスクリプトに関数を曞くこずができるず信じおおり、党䜓のタスクは組み蟌みスクリプトで関数を実行するこずです。 倚くの堎合、倖郚ドメむンのデヌタを倉曎するこずはできたせん。それらを取埗するこずが私たちのタスクです。 デヌタを取埗する必芁がありたす

1任意のテキスト。JSスクリプトによっおフレヌム化され、JSファむルずしお転送できたすナヌザヌスクリプトにパックするため。

2䞀般に、他のファむルからの任意のテキストデヌタ。䜕もフレヌム化するこずができたせん。

3JSONハッシュ-別のドメむン内。



最初のケヌスは、スクリプト自䜓のナヌザヌスクリプトメタデヌタを読み取る必芁がある堎合、たたはJS文字列に゚ンコヌドせずにCSSスタむルを蚘述したい堎合に発生したす。 クロスドメむンはただありたせんが、単䞀のクロスブラりザビュヌを取埗したい堎合、タスクは完党に簡単ではありたせん䞀般的に、解決できたせん-Firefoxには機胜がなく、GreaseMonkeyで導入された「xml」タむプはJS蚀語ず構文的に互換性がありたせん-蚀い換えれば、゚むリアンタむプは決しお実行できたせんクロスブラりザ。 GreaseMonkeyの代わりにメタデヌタずScriptishの堎合のクロスブラりザヌビュヌ、たたはJSの機胜を超えおFirefoxブラりザヌ甚に2文字のファむルを埮調敎する必芁があるずいうハヌフ゜リュヌションを取埗するず、メタデヌタだけでなく* .user.jsファむルの任意のデヌタも読み蟌たれたす。 これはもちろん悪いこずですが、そのようなこずはナヌザヌスクリプトの互換性の珟実です。 問題ず可胜な解決策は、蚘事「 JSでの耇数行デヌタの読み取り 」で詳しく説明されおいたす。 それはナヌザヌスクリプトを超えおいたすが、ナヌザヌスクリプトの䞭では、解決の本圓のチャンスがありたす。



デヌタずスクリプトを1぀のスクリプトファむルナヌザヌスクリプトたたは単玔なスクリプトにパックしようずするず、これらの解決できない問題が発生するこずに泚意しおください。 2぀のファむルを䜿甚する堎合は、2番目のファむルのデヌタをテキストたたはHTMLHTMLコメント内のほが任意のテキストを保持ずしお読み取り、最初のファむルのみスクリプトを読み取るこずができるため、もう問題はありたせん。 ただし、単䞀ファむルの゜リュヌションは、ナヌザヌずの共同䜜業に適した方法です。ナヌザヌには1぀のファむルが提䟛されたす。このファむルは「むンストヌル」するだけで枈みたす。 確かに、Chromeだけがナヌザヌスクリプトをネむティブにむンストヌルできるような些现なこずに぀いおは少し忘れおいたす。 Firefoxの堎合、GreaseMonkeyたたはScriptishアドオンが必芁です。Operaの堎合、ブラりザヌ蚭定でサむトの蚭定を指定する必芁がありたす ぀たり、新しいコンピュヌタヌの堎合、「ファむルをむンストヌルする」だけでなく、䞀連のアクションで新しい心配がありたす。 圌女は、GreaseMonkeyのような非垞に原始的な状態のアドオンを持っおいたす。スクリプトをアドオンの入力フィヌルドにコピヌする必芁がありたす。メタデヌタは考慮されないため、蚀及したせん。 最埌に、SafariにはアドオンNinjaKitも必芁であり、ナヌザヌスクリプトファむルの本文をアドオン゚ディタヌにコピヌしたす。 ぀たり、単䞀ファむル+ブラりザヌ間の互換性は既に非垞に緊密です。



デヌタ亀換の2番目ず3番目のケヌスは、開発者がアクセスできない倖郚ドメむンのドメむンにナヌザヌスクリプトを導入するこずで解決されたす。 ここでは、4぀のブラりザヌのうち2぀にあるバグによっお゜リュヌションが耇雑になりたす。蚘事「 ナヌザヌスクリプトでのドメむン間亀換のChromiumバグのバむパス 」、「 Operaでのナヌザヌスクリプトでのドメむン間デヌタ亀換 」は、それらを克服できるこずを瀺しおいたす。



Operaのナヌザヌスクリプトの代わりのアドオン



私たちは、ナヌザヌだけが元気だったら䜕にも止たらないず譊告したしたか 譊告した。 圌らは䜕をしたしたか 自動化の可胜性のない倚くの蚭定。 これで、私たちは最も困難にさらされる道埳的暩利を埗るこずができたした。Operaのアドオンを生成し、ナヌザヌスクリプトを眮き換えるためのアルゎリズムを考え出すこずができたす。 アドオンの䜜成を自動化するこずは可胜ですが、Operaに組み蟌たれたナヌザヌスクリプトの䜜成は自動化できないためです。 必芁な゜リュヌションは、単䞀の「むンストヌル」ボタンずOperaりェブサむト䞊の堎所で入手できたす。 方法-蚘事「 ナヌザヌスクリプトからのOperaアドオン 」。



ずころで、Safariに぀いおも同じです。 NinjaKit-GreaseMonkeyの機胜に近いアドオンですが、䜕らかの理由でスクリプトテキストを手動でコピヌする必芁があり、クロスドメむンリク゚ストGM_XMLHTTPRequestを完党にサポヌトしおいたせん。 これはなんずなく軜薄です。 これがサポヌトされるかどうかは䞍明です。 たた、ナヌザヌスクリプトアむコンの問題を同時に解決するこずにより、アドオンを実行しやすくなりたす。通垞はFirefoxで解決され、他のどこでも解決されたせんアドオンを陀く。 アむコンメタデヌタディレクティブがサポヌトされ、スクリプトリストのアむコンはFirefoxでのみ機胜したす。 すべおのルヌルの最高保有者の目には開発者の肩曞きを取埗するための小さなク゚ストが必芁なので、すべおは「 ナヌザヌスクリプトからSafariのアドオン 」の蚘事で説明されおいたす 。



クロスブラりザヌアドオン



OperaずSafariず私は、ナヌザヌスクリプトずコヌドが倧きく異なる組み立おが難しいずいう意味ではなく、バむトの匷い違いがある独自のアドオンを䜜成する必芁があるため、すべおのブラりザのすべおのアドオンは䞀般的な原則に埓っお構築されおいたす-拡匵子ず非垞に類䌌した機胜を持぀倚数のファむルを特城ずするzipアヌカむブ。 しかし、拡匵機胜を曞き換えるだけで十分な䞀般的なクロスブラりザアヌカむブを䜜成できたすか ファむル名に競合がない堎合、䜜業は実行可胜です。4぀の華やかなトラックが再び1぀にマヌゞされ、実装機胜は冗長なブラりザ䟝存蚭定を含む単䞀のアヌカむブに耐えたす。 拡匵機胜の名前を手動で倉曎するこずにより、アヌカむブコレクタヌが再び簡玠化されたす。



ナヌザヌスクリプトで他の人の庭に入る



クロスドメむンメタデヌタリク゚ストはそれほど悪くはありたせん。 2぀のブラりザヌで簡単に解決できたすが、Operaでは困難です。 しかし、サヌドパヌティのサむトのフレヌムからクロスドメむンのデヌタ亀換を提䟛する完党な䞍幞に慣れれば、Operaでの決定は簡単に思えたす。 メタデヌタの読み取りは特別な堎合であり、Operaの同じ亀換手法を䜿甚した子䟛の楜しみになりたす残念ながら、BeforeScriptを䜿甚したナヌザヌスクリプトには䜕らかのバグがありたす。 「完党な䞍幞」の解決方法に぀いおは、蚘事「 ナヌザヌスクリプトでのクロスドメむン亀換のためのChromiumバグのバむパス 」ず、「 Google Plusボタンのコンパクトサむズ 」の蚘事を参照しおください。 」 そしお実際、ほずんどの堎合24ピクセルで「いいね」の数の1-2-3桁で十分なのに、「いいね」の数に関するデヌタが䞍足しおいるため、氎平に70ピクセルを費やすのはなぜですか ペヌゞのデザむンに「話す」+1ボタンが必芁なのはなぜですか ナヌザヌスクリプトは、これらすべおの問題を解決したす。むンストヌルするのはナヌザヌ次第です。 Operaのスペクタヌは再び䞊昇し、蚭定に関する倧量の指瀺に怖がっおいたす-たったく、以前の蚘事でアドオンにスクリプトをパックする方法を孊んだこずは䜕もありたせん。



これは、最新バヌゞョンで䜜成されたナヌザヌスクリプトぞの最も壮芳な远加です。 Google+ボタンは、ナヌザヌスクリプトのために非垞にコンパクトです。

図1  I-pictures 、 imageshack 



蚘事は通垞準備ができおいたす。 HabrAjaxスクリプト自䜓を陀き、これらすべおの問題が衚面化したこずに基づいお、テストケヌスは䜜成されおいたせん。 したがっお、それらはすべおの補助資料の準備が敎ったこずに気づき、来週たたは2週間で公開されたす。 たずえば、Chromiumバグの回避策を説明するために䜿甚できる、最もコンパクトでクリヌンなナヌザヌスクリプトを远加したいず思いたす2.5幎ありたす。䞀郚はそれを「セキュリティ機胜」ず芋なしたす。



しかし、HabrAjaxに぀いおはどうでしょうか。



芁するに、圌はバヌゞョン0.81で次の機胜を獲埗したした。

* 個人ペヌゞぞの盎接リンクは、2〜3回クリックするのではなく、1回でアクセスできたす。



図2



* スクリプトの曎新を確認する -定期的に、1日に1回期間が蚭定されおいるスクリプトを確認したす。 バヌゞョンがマむナヌである堎合は気にしたせん。 クロスドメむンテクノロゞヌ



図3



* メタデヌタの機胜を衚瀺 -怜蚌䞭にサヌバヌ䞊に新しいものず同様に、新しいものが登堎したこずを瀺唆したす。 クロスドメむンテクノロゞヌ



図4



* メタデヌタ内のスタむリッシュなアむコン 非垞にクヌル 右䞊にありたす。

*チェックボックスの呚りのこれらのフレヌムは、最新の倉曎された機胜を連想させたす。

* カスタマむズ可胜な最倧 匷制切断された写真の高さ デフォルトはZenCommentで120。 泚釈の高さ最倧は2倍です。

* 匕甚たたは䜜者の名前を匷調しお手玙を曞きたす-それらを手動でコピヌする必芁はありたせん「匕甚修正」蚭定によっお有効にされたす。

* メヌルプレビュヌボタン。

* コンパクトなGoogle Plusボタン クロスドメむンテクノロゞヌ

* ZenCommentスタむルの小さな倉曎-そのバヌゞョン2.16もHabrAjaxに組み蟌たれおいたす。 スクリプトを䜿甚するず䟿利ですが、スタむルずスクリプトが独立するようにすべおが行われおいたす。 必芁な必然的に最䜎限必芁なスタむルはスクリプトで蚘述され、倚くの250行を占めたす。



はい、そしおスクリプトに぀いお-既にそれを䜿甚しおいる人のために-調査に参加しおください-「 どのブラりザでHabrAjaxスクリプトを䜿甚したすか 」耇数の遞択肢が可胜です。 スクリプトが動䜜するブラりザずOSの画像を確認するず圹立ちたす。 2぀の異なるコンピュヌタヌがある堎合-投祚で2祚を投祚したす異なる堎所から。 Firefoxのアドオンも重芁です-メタデヌタディレクティブのクロスブラりザの耇数行テキストを䜜成できるため、より柔軟なアドオンはScriptishであるこずが刀明したした蚘事「 JSでの耇数行デヌタの読み取り 」で説明したす。



UPD 18:30ナヌザヌ名の呚りのリンクが正しくない匷迫芳念のバグを修正。 Opera、Fx、Chromeでテスト枈み。 オペラはDOMを読むのに最も圱響を受けやすいこずが刀明したした。ナヌザヌの未登録のバグを瀺したした。ダりンロヌドを管理した人を曎新しおください。 同時に、メタデヌタの読み取りず新しいバヌゞョンで行われたこずの衚瀺に関する䜜業が衚瀺されたす[曎新の確認 ]リンクをクリックした堎合。

UPD2ただし、倚くのChromeナヌザヌがアンケヌトを衚瀺し始めおいたす。



All Articles