2011-06-21 11 views
2

IEを使用しているときにJavaScriptを無効にしようとしています。 template.phpやカスタムモジュールでこれを実現する方法はありますか?Drupalによってプログラム的にJavaScriptが無効にされます

+2

なぜですか? ----------- –

+2

@ペッカ:それらを罰する。それはそれらを学ぶでしょう。 –

+2

@Georgeしかし、それを行うにははるかに効果的な方法があります!たとえば、rotten.comやlemonpartyにリダイレクトします。または、[地震効果](http://www.java-scripts.net/javascripts/Windows-Earthquake.phtml)を実行してください(IEではまだ動作します、よ!) –

答えて

0

template.phppreprocess_page()フックを使用できます。

function YOUR_THEME_preprocess_page(&$vars) { 
    if (isset($_SERVER['HTTP_USER_AGENT']) && (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false)) { 
    $vars['scripts'] = 'get a mac!'; 
    } 
} 

明らかにあなたが出力するHTMLを含む文字列である、$vars['scripts']のコンテンツを処理する代わりに$ VARS [「スクリプト」]コンテンツをよりインテリジェントな何か:)

+0

素晴らしい提案。オペレーション 'Get a Mac!' $ var ['scripts']は.jsファイルの長い文字列を返します。残念ながら、これは私が望ましくないjavascriptファイルを設定解除できないことを意味します。しかし、提案していただきありがとうございます。 – sisko

+0

@siskoの場合は、その文字列を解析し、必要なものを削除し、残りの部分で$ vars ['scripts']を設定する必要があります。 –

+0

@sisko:おそらくjavascriptファイルのブラウザでスニッフィングを行い、ie6のために別のjavascriptを提供する方が良いでしょうか? –

1

を行う必要があります、「モジュール」インデックスは、モジュールから追加されたJavaScriptファイルへの参照が含まれてい

$header_javascript = array(
    'core' => array(
    'misc/jquery.js' => array(
     'cache' => TRUE, 
     'defer' => FALSE, 
     'preprocess' => TRUE, 
    ), 
    'misc/drupal.js' => array(
     'cache' => TRUE, 
     'defer' => FALSE, 
     'preprocess' => TRUE, 
    ), 
), 
    'module' => array(), 
    'theme' => array(), 
    'setting' => array(
    array('basePath' => base_path()), 
), 
    'inline' => array(), 
); 

<head>タグは、次のいずれかに類似したdrupal_add_js(NULL, NULL, 'header')から返された値を、使用することができます"settings"には、一般的にモジュールによって追加されたすべてのJavaScript設定が含まれ、 "inline"にはインラインJavaScriptコードが含まれます。
異なるJavaScriptファイルを区別する必要がある場合や、「コア」としてマークされているJavaScriptファイルには触れない場合などに役立ちます。

$vars['scripts']の内容を入力すると、drupal_get_js()のコードの一部を複製する必要があります。カスタマイズされたコードが必要なので、その関数のすべてのコードを複製することはありませんが、それでもその一部を複製します。

Drupal 7では、変数$vars['scripts']template_preprocess_page()(およびモジュールまたはテーマによって実装された同様の前処理機能)にはもう渡されません。 template_preprocess_html()に渡されます。

関連する問題