2011-06-21 162 views
2

我想在用戶使用IE時禁用JavaScript。有沒有辦法在template.php或自定義模塊中完成此操作?Drupal以編程方式刪除JavaScript

+2

爲什麼? ----------- –

+2

@Pekka:懲罰他們。這將學習'時間。 –

+2

@George,但有很多更有效的方法來做到這一點!例如,將它們重定向到rotten.com或lemonparty。或者運行[地震效果](http://www.java-scripts.net/javascripts/Windows-Earthquake.phtml)(仍然在IE中工作,耶!) –

回答

0

您可以使用template.php中的preprocess_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!'; 
    } 
} 

很顯然,你應該做些更聰明與$瓦爾[「腳本」]內容:)

+0

很棒的建議。操作'Get a mac!'會工作,但$ var ['scripts']返回一串長長的.js文件。不幸的是,這意味着我無法取消設置不需要的JavaScript文件。但是,感謝您的建議。 – sisko

+0

@sisko,你需要解析這個字符串,刪除你想要的,然後用餘數設置$ vars ['scripts']。 –

+0

@sisko:也許它更好地做的瀏覽器在JavaScript文件中嗅探,並提供不同的JavaScript爲ie6? –

1

作爲替代處理的$vars['scripts']的內容,這是包含在HTML以輸出字符串<head>標籤,你可以使用從drupal_add_js(NULL, NULL, 'header')返回的值,它類似於以下之一:

$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(), 
); 

「模塊」索引中包含的參考,從模塊添加的JavaScript文件, 「設置」包含模塊通常添加的所有JavaScript設置,「內聯」包含內聯JavaScript代碼。
如果您需要區分不同的JavaScript文件,並且(例如)不觸摸任何已標記爲「核心」的JavaScript文件,它可能會有所幫助。

平衡是爲了填充$vars['scripts']的內容,您需要複製drupal_get_js()中使用的部分代碼。因爲你需要一個定製的代碼,你不會複製該函數的所有代碼,但你仍然會複製它的一部分。

在Drupal 7中,變量$vars['scripts']不再被傳遞到template_preprocess_page()(以及由模塊或主題實現的類似預處理函數);它傳遞給template_preprocess_html()