1

渡される URL 変数に基づいて別のスタイルシートをロードするには、javascript を使用する必要があります。

シナリオは次のとおりです: 1 つの CSS スタイルシートと、iOS アプリにロードされた Web ビューを介してアクセスされたときに同じページのスタイルを設定するために使用される別のスタイルシートでモバイル Web サイトを維持する必要があります。

www.blog.meetcody.com を見ると、メディア クエリとレスポンシブ ウェブデザインを既に使用していることがわかります。これが不十分な理由は、ネイティブ アプリとモバイル サファリのどちらでページが Web ビューを介して読み込まれているかをメディア クエリが検出できないためです。この 2 つのケースを別々に処理する必要があります。このブログはホストされた wordpress ブログであり、iOS アプリで JSON API を介してアクセスしています。

これを処理する方法は次のとおりです。Web ページが iOS アプリを介して読み込まれると、URL「/?app=true」の末尾に変数を追加します。私がやりたいのは、URL にこの文字列が含まれているかどうかを確認し、含まれている場合は別の Web ビューを使用することです。

私は以下のコードでこれをやろうとしています:

    <script language="javascript" type="text/javascript">
    if(window.location.href.indexOf('/?app=true') > -1) {

        document.write("<link rel=\"stylesheet\" type=\"text/css\" href=\"http://blog.meetcody.com/wp-content/themes/standard/appstyle.css\" />");
    }
    document.close(); 
</script>

私が抱えている問題は、?app=true が URL の一部である場合、上記のコードが実際には appstyle.css スタイルシートをロードしないことです。

http://blog.meetcody.com/wp-content/themes/standard/appstyle.css?ver=3.4.2を見ると、背景を黒に設定してテストしていることがわかります。本文 {} タグ

body {
background: black;
}

一方、 http: //blog.meetcody.com/wp-content/themes/standard/style.css?ver=3.4.2 の style.css では、ボディの背景色は #F2F0EB です。本文 {} タグ内

    body {
        background: #F2F0EB;
   }

もちろん、背景色を変更するだけではありませんが、これは例として示しているだけです。

これを行うためのより良い方法はありますか、それとも私のコードに何か問題がありますか? おそらく、javascipt の href である appstyle.css への直接リンクを使用することはできませんか? 大変助かりました。そしてメリークリスマス!

4

2 に答える 2

4

次のようにappendChild()を使用して、CSSスタイルシートを追加できます。

 var header = $.getElementsByTagName('head')[0];
 var styleSheet = $.createElement('link');
 styleSheet.rel = 'stylesheet';
 styleSheet.type = 'text/css';
 styleSheet.href = 'style.css'; // name of your css file
 styleSheet.media = 'all';
 header.appendChild(styleSheet);

もちろん、次のようにすることで、現在のURLに応じて異なるcssファイル名に対応するようにこの例を変更できます。

 styleSheet.href = (isMobile == true) ? 'mobile.css' : 'default.css';
于 2012-12-25T06:04:08.890 に答える
1

インライン スクリプトを使用している場合は、ドキュメントを閉じようとしないでください。document.close は、iframe、フレーム、または新しいウィンドウに document.write する場合にのみ必要です

また、フラグを配置した場所であるため、href ではなく location.search をテストすることをお勧めします。

してみてください

<script language="javascript" type="text/javascript">
if (location.search.indexOf('app=true') > -1) {
  document.write('<link rel="stylesheet" type="text/css" href="http://blog.meetcody.com/wp-content/themes/standard/appstyle.css" />');
}
</script>

サイトの10以上のシートの1つに設定されているものを上書きしたい場合は、おそらくそのスクリプトを他のスタイルシートの後に配置します。サーバーでクエリ文字列をテストするか、クエリ文字列を app=yes に設定します。 、セッションなどに何かを設定し、それを使用して、JSに依存する代わりにサーバーに正しいcssを含めます

PS: body タグには、ホームページの home と blog のクラスがあります。上記のスタイルシートを見て、それらのクラスの色が何であるかを確認することをお勧めします。

PPS: ここにはメディア検出が表示されません

<link rel='stylesheet' id='standard-activity-tabs-css'  href='/wp-content/themes/standard/lib/activity/css/widget.css?ver=3.4.2' type='text/css' media='all' />
<link rel='stylesheet' id='gcse-widget-css'  href='/wp-content/themes/standard/lib/google-custom-search/css/widget.css?ver=3.4.2' type='text/css' media='all' />
<link rel='stylesheet' id='standard-ad-300x250-widget-css'  href='/wp-content/themes/standard/lib/standard-ad-300x250/css/widget.css?ver=3.4.2' type='text/css' media='all' />
<link rel='stylesheet' id='standard-ad-125x125-widget-css'  href='/wp-content/themes/standard/lib/standard-ad-125x125/css/widget.css?ver=3.4.2' type='text/css' media='all' />
<link rel='stylesheet' id='standard-ad-468x60-css'  href='/wp-content/themes/standard/lib/standard-ad-billboard/css/widget.css?ver=3.4.2' type='text/css' media='all' />
<link rel='stylesheet' id='standard-personal-image-widget-css'  href='/wp-content/themes/standard/lib/personal-image/css/widget.css?ver=3.4.2' type='text/css' media='all' />
<link rel='stylesheet' id='standard-influence-css'  href='/wp-content/themes/standard/lib/influence/css/widget.css?ver=3.4.2' type='text/css' media='all' />
<link rel='stylesheet' id='bootstrap-css'  href='/wp-content/themes/standard/css/lib/bootstrap.css?ver=3.4.2' type='text/css' media='all' />
<link rel='stylesheet' id='bootstrap-responsive-css'  href='/wp-content/themes/standard/css/lib/bootstrap-responsive.css?ver=3.4.2' type='text/css' media='all' />
<link rel='stylesheet' id='standard-css'  href='/wp-content/themes/standard/style.css?ver=3.4.2' type='text/css' media='all' />
于 2012-12-25T06:10:02.717 に答える