問題タブ [userscripts]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - クロムでユーザースクリプトを機能させるのに役立ちます
Gmail のユーザー スクリプトを作成しました: Pimp.my.Gmail & Google Chrome とも互換性があるようにしたいと思います。
今、私はいくつかのことを試しましたが、Javascript の知識 (非常に弱い) の範囲内で、ある程度までは成功しましたが、それが正しい方法かどうかはわかりません。
Chromeで動作させるために私が試したのは次のとおりです
。最初に見つけたのは、それcontentWindow.document
が動作しないということcontentDocument
です。
しかし、Firefox と Chrome でコンソール メッセージを確認すると、Firefox ではスクリプトが複数回実行されるのに対し、Chrome では 1 回だけ実行されることがわかりました。
だから私はラインを放棄してwindow.addEventListener('load', init, false);
それを置き換える必要がwindow.setTimeout(init, 5000);
ありましたが、これが良い考えかどうかはわかりません.
私が試したもう1つのことは、キャンバスフレームが見つからない場合に備えて、window.addEventListener('load', init, false);
行を保持し、window.setTimeout(init, 1000);
内部で使用することです.init()
ですから、このスクリプトをクロスブラウザ対応にする最善の方法を教えてください。ああ、私はこのスクリプトをより良く/効率的なコードにするためのすべての耳を傾けています (これは確かに可能です)
編集:仕方がない…?:'(
edit 28-Apr:
コードを少し書き直したところ、次のようになりました。
これは Firefox では問題なく動作しますが、Chrome ではtop is undefined
エラーが発生します。私が気付いたもう1つのことは、最初の行を削除するif(document.location != top.location) return;
と、waitforiframe()
メソッドが何度も呼び出され続けることです。(つまり"Finding canvas frame"
、コンソールにエラーが表示されます)
誰かが最初の行が何をするか教えてもらえますか? 私はそれが何を達成するのか、waitforiframe()
その行を削除するとメソッドが永久に実行されるのはなぜですか??
firefox - ドメイン文字列に反応するGreaseMonkeyスクリプトを記述します(I18Nの場合、たとえばcn、en、frなど)。
複数の言語をサポートするWebサイトがあるとします。
- cn.mydomain.comまたはmydomain.com/cnまたはmydomain.cn
- en.mydomain.comまたはmydomain.com/enまたはmydomain.com
- fr.mydomain.comまたはmydomain.com/frまたはmydomain.fr
ユーザーがページをロードしているアドレスに応じて異なる文字列/値が割り当てられた変数を持つGreaseMonkeyスクリプトを作成したいと思います。どうやってそれをしますか?ありがとう
編集:JavaScriptを使用してアドレスを取得できることに気付きました。GreaseMonkey自体はこの種の機能をサポートしていますか?
jquery - 元のページが jQuery 1.3 (異なるバージョン) を使用しているときに、GreaseMonkey で jQuery 1.4 を使用していますか?
古いバージョンの jQuery (1.3.1) が既にあるページを変更するユーザースクリプトで、必要な新しいバージョンの jQuery (1.4.2) を提供する最善の戦略は何ですか?
元のページでは引き続き「$」記号を使用し、スクリプトでは によって割り当てられたエイリアスを使用することをお勧めしjquery.noConflict()
ます。
この質問への回答によると、ロードしたい追加バージョンは元のスクリプトタグの上に配置する必要があります。ページの読み込み後に GreaseMonkey がスクリプトを実行するという印象を受けているので、ここで少し混乱します。
編集: 1.3.1関数を使用する元のページのコードを壊さないように、ユーザースクリプトに1つの考えがあり、jQuery 1.4.2のスクリプトタグを追加し、エイリアスを設定してから、1.3.1のスクリプトタグを再度追加します。
ただし、これには jQuery ライブラリをページごとに 3 回ロードする必要があります。もっと良い方法はありますか?
編集 2: GM スクリプトが 1.4.2 のコピーを提供しているにもかかわらず、元のページは 1.3.1 のコピーを引き続き使用できるようですgj
。 1.4.2 内の jQuery オブジェクトcode142()
。
他に何も出てこなければ、これが私の解決策です。この問題に遭遇する可能性のある他の人々に役立つことを願っています。
google-chrome-extension - Chrome がユーザー スクリプトを介してシークレット モードであるかどうかを判断することは可能ですか?
以前にこの質問をしましたが、Web ページの JavaScript ではなく、ユーザー スクリプトを意味していることを明確にしませんでした。
Google Chrome がユーザー スクリプト (基本的には、Web ページで実行されるスクリプトではなく、ブラウザの拡張機能として実行されるスクリプト) を介してシークレット モードであるかどうかを判断することは可能ですか?
javascript - Javascript でキー入札に特殊キーを使用する
macbook pro の音楽コントロール用の特別なキーを使用して、javascript でバインドできるかどうか疑問に思っていました。キーの例: 再生/一時停止、次へ、戻る。
それが役立つ場合は、グリースモンキースクリプトを変更するためにこれを実行しようとしています。
これが現在のコードです
スクリプト ソース: http://userscripts.org/scripts/review/23612
javascript - フォームの入力フィールドの送信を停止する
Web サイトのフォームにいくつかの入力フィールドを挿入する JavaScript (グリースモンキー/ユーザースクリプト) を書いています。
問題は、これらの入力フィールドがフォームに影響を与えたくない、フォームが送信されたときに送信されたくない、JavaScriptがそれらの値にアクセスできるようにしたいだけです。
フォームの途中にいくつかの入力フィールドを追加し、フォームが送信されたときにそれらを送信しないようにする方法はありますか?
明らかに、入力フィールドがフォーム要素にないことが理想的ですが、結果のページのレイアウトで、挿入された入力フィールドが元のフォームの要素の間に表示されるようにしたいと考えています。
javascript - 変数を新しいページに渡す
あるページから変数を渡し、別のページをロードしてその情報を入力しようとしています。このようなもの:
127.0.0.1 / test.html&ID=1234の場合
127.0.0.1 / test.htmlもnewpage.htmlも変更するためのアクセス権がありませんが、別の変数からそれらに変数を渡したいです。これは可能ですか?
jquery - ユーザースクリプトでターゲットページのjQueryを再利用するには?
<script> 要素@require
(0.8 より前の GM や他のブラウザーなど) を使用(つまり GM 固有) または挿入する代わりに、ターゲット ページが既に読み込んで使用しているオブジェクトを使用したいと考えています。jQuery
そのような状況は実現可能であり、それを機能させる方法はありますか? $
orだけを使用してみましたjQuery
が、うまくいきません。GM_wait
リンクされた記事に記載されている -timer-trickも試しましたが、うまくいきませんでした。
それがうまくいかないのなら、なぜですか?
javascript - 関数が終了した後、または DIV が表示された後にコードを実行する
私は Facebook 用の Userscript を作成しましたが、同様の通知がグループ化されています。今、私が持っていた古い通知を含む静的な HTML ページだけを使用すると、スクリプトは 100% 機能します。
問題は次のとおりです。デフォルトで通知を保持する DIV には、ユーザーが [通知] ボタンをクリックするまで通知がありません。onclick
Facebook には、DIV (通知メニュー) を表示し、AJAX を使用して通知を取得するインラインイベントがあります。私のユーザースクリプトは起動時にのみ実行されるため、そこには何も見つかりません。ページには影響しません。.click() イベントを使用してみましたが、[通知] ボタンをクリックするとコードが実行されます。問題は、Facebook がまだ通知の AJAX 要求を実行していることです。つまり、スクリプトが動作するための通知がまだないため、効果がありません。
ユーザーが前に通知を表示し、その後突然通知を表示する必要がないため、一般的な setTimeout を使用したくありません。DIV を監視して、通知が追加されたら実行する方法はありますか? それとも、Facebook が AJAX リクエストを終了したら、私のコードを実行するのでしょうか?
javascript - 匿名のイベントリスナーを削除する
このように追加されたイベントリスナーを削除する方法はありますか?
要素を交換せずに?