Chrome拡張機能を作成していて、ユーザーがページ上の要素をクリックしたときにJqueryを挿入しようとしています。私は実行してjqueryのを経由してダイアログを作成しようとすると:注入時にJqueryダイアログが正しく表示されない
var box = document.createElement('div');
box.id = 'box'
box.title = 'hello'
document.body.appendChild(box);
その後
$("#box").dialog();
のみ閉じるボタンの横に置かれたテキストと一緒に、表示されます。なぜそれが完全なダイアログボックスを表示していないのか分かりません。奇妙なことはサイトによって異なることです。だから私はSOロードし、ダイアログを呼び出す場合、これが表示されます:
しかし、私はのredditをロードした場合、これが表示されます。
注入されたダイアログからプロパティを継承しているようです私がそれを注入しているウェブサイト。私はそれを注入し、可能であればデフォルトのボックスを表示したいと思います。私はjQueryのindex.htmlのサンプル・ページに注入場合、それが実際にデフォルトのボックスを表示する唯一の時間は、彼らが提供していることである:
私はjqueryの-ui.min.css、jqueryの-ui.minを持っています.js、およびjquery.min.jsをすべて拡張のディレクトリに保存します。サンプルページを読み込んでそこにダイアログを挿入しようとすると動作しますが、他のWebサイトには挿入されません。誰でもこれを解決することができれば、本当に感謝しています。
おかげ
、入力に感謝。では、JQueryを使用しないで、既存のWebページ(JQueryを使用する)にChrome拡張機能を使用してダイアログウィジェットを作成することをお勧めしますか?もしそうなら、これを達成するために何をお勧めしますか?再度、感謝します。 – Zuhayr
@ Zuhayrあなた自身のjQueryを使用することができます。それを分離するための手順を踏むだけです。たとえば、jQueryには、これを助けるために使用できる['$ .noConflict()'](https://api.jquery.com/jquery.noconflict/)があります。CSSについては、私が言ったように、それを分離する完璧な方法はありませんが、すべてのルールをおそらく一意のIDで始めることは、その影響を最小限に抑えるべきです。 – Ouroborus
この回答はjQueryに関して完全には正しくありません。エクステンションから挿入するスクリプトには独自のスコープがあり、すでにWebページにあるjQueryと一緒に使うことができます。あなたは、紛争がルールになることを暗示しますが、実際にはそれを考慮する必要はほとんどありません。もちろん、拡張機能とページの両方が、domの同じ要素を設定しようとすると、競合する可能性があります。最後は勝ちます。ほとんどの場合、イベントハンドラでも問題なく動作します。 $ .noConflict()を使用する必要はありません - 異なるバージョンであってもjQueryライブラリの競合はありません –