Joomla 3.4.1如何删除用jQuery调用的JCaption?


10

我想从通过以下方法停用的head,jquery和jcaption文件中删除JCaption

unset($doc->_scripts[JURI::root(true) . '/media/jui/js/jquery.min.js']);
unset($doc->_scripts[JURI::root(true) . '/media/jui/js/jquery-noconflict.js']);
unset($doc->_scripts[JURI::root(true) . '/media/jui/js/jquery-migrate.min.js']);
unset($doc->_scripts[JURI::root(true) . '/media/system/js/caption.js']);

要删除使用mootools的先前版本上的jcaption,请执行以下操作:

$this->_script = preg_replace('%window\.addEvent\(\'load\',\s*function\(\)\s*{\s*new\s*JCaption\(\'img.caption\'\);\s*}\);\s*%', '', $this->_script);

我也尝试过在jquery上删除它,但是我没有preg_replace()的经验,怎么从头删除JCatpion?

我的代码:

$this->_script = preg_replace('%jQuery\(window\)\.on(\'load\',\s*function\(\)\s*{\s*new\s*JCaption\(\'img.caption\');\s*}\);\s*%', '', $this->_script);

Answers:


5

这是一个非常老的问题,可能没人再读了,但是无论如何我都会发表我的答案。

JQuery标题的正则表达式中,您有错误。您无需转义圆点,但必须转义特殊字符。另外,您还需要在数组中定位正确的键,因此需要['text/javascript']在调用脚本对象后添加。

因此正确的regex / preg_replace将是:

$this->_script['text/javascript'] = preg_replace('%jQuery\(window\).on\(\'load\',\s*function\(\)\s*\{\s*new\s*JCaption\(\'img.caption\'\)\;\s*\}\)\;\s*%', '', $this->_script['text/javascript']);

不久前,我也在regex方面苦苦挣扎,但该站点提供了很多帮助:http : //regexr.com/ 如果您尝试该站点,请注意您不需要使用open和close标签,因为它已经自动存在了。


为避免转义单引号,请将模式用双引号引起来。分号不需要逃脱。在这种情况下,尽管不转义点仍然可以提供预期的结果,但是匹配文字点而不是模式中的“任何字符”元字符会更准确/更有效,因此我建议转义点。
mickmackusa


2

尝试这个:

if (isset($this->_script['text/javascript']))
{ $this->_script['text/javascript'] = preg_replace('%window\.addEvent\    (\'load\',\s*function\(\)\s*{\s*new\s*JCaption\(\'img.caption\'\);\s*}\);\s*%',     '', $this->_script['text/javascript']);
if (empty($this->_script['text/javascript']))
unset($this->_script['text/javascript']);}
$this->_scripts = array();

0

如果您愿意使用插件来取消注入的脚本标签,则以下内容可能会有用。

public function onBeforeRender() {
    // Front end
    if ($this->app instanceof JApplicationSite) {
        $doc = JFactory::getDocument();

        foreach ($doc->_script as $key => $script) {
            if (stristr($key, 'text/javascript') !== false) {
                unset($doc->_script['text/javascript']);
            }
        }
    }
}

php手册不仅声明其strstr()效率不如strpos()检查字符串中是否存在子字符串,而且该任务无需搜索子字符串- $key完全字符串匹配。
mickmackusa
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.