ロードされたドキュメントのスタイルシートリンクを変更し、新しいcssがロードされるまで待ってから、適切なjsコードを実行することは可能かどうか疑問に思います
提案をありがとう
ロードされたドキュメントのスタイルシートリンクを変更し、新しいcssがロードされるまで待ってから、適切なjsコードを実行することは可能かどうか疑問に思います
提案をありがとう
html:
<link id="mystylesheet" href="/path/to/css.css" />
コード:
$("#mystylesheet").load(function(){
//Your javascript
}).attr("href", "/new/path/to/css.css");
これにより、現在のCSSが置き換え.load()
られ、新しいCSSファイルがフェッチされた後にハンドラー内のコードが実行されます。
@ahrenはほぼ正しかった。ただし、リンク要素のhrefを動的に変更して、cssファイルの読み込みが完了したときにコールバックを使用しても、ほとんどのモバイルデバイスでは機能しないようです。
代わりに、loadを使用してスタイル要素にスタイルを直接挿入してみてください..モバイルブラウザを含むほとんどの最新のブラウザでサポートされることになります
IE8のサポートを含むように更新されました-; 注:これには、cssがロードされたことを確認するためにダミールールをcssに挿入する必要があります(この場合、body {ready:true;}を使用します)
css
body {ready:true;}
...
html
<style id="your-style-element"></style>
javascript
if (document.createStyleSheet) {
//Wait for style to be loaded
var wait = setInterval(function(){
//Check for the style to be applied to the body
if($('body').css('ready') === 'true') {
clearInterval(wait);
//CSS ready
}
}, 300);
document.createStyleSheet(url);
} else {
//Dynamically load the css for this doc
$("#your-style-element").load(url,function(){
//CSS ready
});
}
この男を試してみてください:http://forum.jquery.com/topic/loading-stylesheets-on-the-fly
または:http ://www.rickardnilsson.net/post/2008/08/02/Applying-stylesheets-dynamically-with-jQuery.aspx または jQueryを使用したスタイルシートの変更
それが原因に合うことを願っています:)
コード
var link = $("<link>");
link.attr({
type: 'text/css',
rel: 'stylesheet',
href: <your CSS file url>
});
$("head").append( link );
この場合のために私が特別に書いたプラグインを試すことができます。
.load()
の方法がわからないので、jQuery
クロスブラウザではないようです。IEのみonload=""
がリンク要素afaikのイベントをサポートします。
これが私が書いた要点で、たった47のLOCで完璧に機能します。
https://gist.github.com/aleclarson/ac6456c75edae9fe9d9b6938142a065b
これは、指定されたすべてのURLフラグメントがロードされるまで、すべてのフレームrequestAnimationFrame
をチェックするために使用されます。document.styleSheets
例:
const styles = require('./styles')
const promise = styles.onLoad('foo.css', 'bar.css')
promise.then(() => console.log('Styles loaded!'))
純粋なJavaScriptも!
TeaCoderはhttps://stackoverflow.com/a/35644406/20774でこの質問に対する良い答えを持っています。
基本的にelementsonload
メソッドを使用し、スタイルがロードされた後に実行するロジックを配置します。
組み込みのDOM機能を使用してそれを行うのは良い方法ですが、コールバック構文は少し厄介です。これが私がPromisesでそれをした方法です:
const createOnLoadPromise = (htmlElement) =>
new Promise((resolve) => {
htmlElement.onload = resolve;
});
const link1 = document.head.appendChild(createStyleLink(href1));
const link2 = document.head.appendChild(createStyleLink(href2));
await Promise.all([
createOnLoadPromise(link1),
createOnLoadPromise(link2),
]);
// do whatever you need to do after the await