コードが常に機能しているとは限らない場合は、要素がページのjavascriptによって作成/ロードされていることを示しています。したがって、そのdivを移動するには、標準のAJAX対応の手法を使用する必要があります。
手法は、タイマー、ミューテーションオブザーバー、ミューテーションイベント、およびAJAX XHRのインターセプト(該当する場合)です。これらはすべて他のStackOverflowの質問で説明されていますが、ミューテーションイベントは非推奨/バギーです。XHRのインターセプトは厄介になり、ここでは適用されない場合があります。突然変異オブザーバーは複雑になる可能性があります。
waitForKeyElements()ユーティリティをダウンロードしてマニフェストに追加することをお勧めします。
次に、移動するコードは次のように<div>
なります。
waitForKeyElements (
"jQuery selector for div(s) you want to move",
moveSelectDivs
);
function moveSelectDivs (jNode) {
jNode.insertBefore ("APPROPRIATE JQUERY SELECTOR");
}
マニフェストをで実行するようにdocument_end
設定しておきます。これは、発砲時のDOMContentLoaded
--と同等です。$(document).ready()
デフォルトでrun_at
は、発火が遅すぎて予測できない時間に発生します。run_at
document_start
タイマー、ミューテーションオブザーバーなどはすべてDOMContentLoaded
イベントが終了するまで起動しません-とにかく現在のバージョンのChromeの場合(他のブラウザには同じ制限がありません)。
最速のアクションだがより遅いウェブページのための代替方法:
それにかんする:
(ページが読み込まれ、divの動きが表示されます)これは避けたいものです。
DOMContentLoaded
Chromeで動作する前に何かを行う方法は2つしかありません。
mycss.css
移動するまでdivを非表示にするように設定できます。これは、パフォーマンスの面で最も費用効果の高い方法である可能性があります。
- または、をオーバーライドできます
document.createElement()
。これにより、新しい要素に可能な限り高速に応答しますが(以前に作成されたと仮定DOMContentLoaded
)、ページ全体の速度が大幅に低下する可能性があります。
で実行するようにコンテンツスクリプトを設定しdocument_start
、オーバーライドコードを挿入する必要があります。したがって、スクリプトは次のようになります。
addJS_Node (null, null, scriptMain);
function scriptMain () {
var _orig_createElement = document.createElement;
document.createElement = function (tag) {
var element = _orig_createElement.call (document, tag);
var movingNode = document.querySelector ("MOVING DIV SELECTOR");
if (movingNode) {
var target = document.querySelector ("TARGET DIV SELECTOR");
if (target) {
target.parentNode.insertBefore (movingNode, target);
document.createElement = _orig_createElement;
}
}
return element;
};
}
function addJS_Node (text, s_URL, funcToRun) {
var D = document;
var scriptNode = D.createElement ('script');
scriptNode.type = "text/javascript";
if (text) scriptNode.textContent = text;
if (s_URL) scriptNode.src = s_URL;
if (funcToRun) scriptNode.textContent = '(' + funcToRun.toString() + ')()';
var targ = D.getElementsByTagName ('head')[0] || D.body || D.documentElement;
targ.appendChild (scriptNode);
}
これにjQueryを使用しないでください。