【问题标题】:Drupal programmatically remove JavaScriptDrupal 以编程方式删除 JavaScript
【发布时间】:2011-06-21 15:32:03
【问题描述】:

我试图在用户使用 IE 时禁用 JavaScript。有没有办法在 template.php 或自定义模块中完成此操作?

【问题讨论】:

  • @Pekka:惩罚他们。那会学习的。
  • @George 但是有很多更有效的方法可以做到这一点!例如,将它们重定向到 rotten.com 或柠檬派对。或者运行earthquake effect(在 IE 中仍然有效,耶!)
  • 说真的,如果您因为兼容性问题而想禁用 JS(这实际上是不可能的),尝试修复该问题更为可行。这通常很容易。
  • @Pekka:问题出在一个名为 map hilight 的模块上。它适用于所有其他浏览器,除了你知道谁。我调查了一个修复程序,但找不到一个据说可以解决这些问题的 mystory 补丁。现在,我的理由是我将只删除一小部分功能,以便我的客户至少可以使用他们的网站,因此我有理由在检测到 IE 时尝试禁用/删除脚本。

标签: javascript drupal


【解决方案1】:

作为处理$vars['scripts'] 的内容的替代方法,它是一个包含要在<head> 标记中输出的HTML 的字符串,您可以使用从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()

【讨论】:

    【解决方案2】:

    您可以在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!';
      }
    }
    

    显然你应该对 $vars['scripts'] 内容做一些更智能的事情:)

    【讨论】:

    • 很好的建议。操作“获取 Mac!”本来可以,但 $var['scripts'] 返回一长串 .js 文件。不幸的是,这意味着我无法取消设置不需要的 javascript 文件。不过感谢您的建议。
    • @sisko,您需要解析该字符串,删除您想要的内容,然后将 $vars['scripts'] 设置为剩余部分。
    • @sisko: 浏览器在 javascript 文件中嗅探,并为 ie6 提供不同的 javascript 可能会更好?
    • 我试图避免这种情况,因为我不想破解我几乎不理解的代码。而且我想不出一种方法来嗅探和转移我自己的 javascript 代码。而且,它是 IE 的所有版本——不只是 6 个……典型的 :-)
    • Javascript 嗅探和转移 IE 很容易:if (navigator.userAgent.match(/MSIE/i) != null) {...} else {...}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    相关资源
    最近更新 更多