【问题标题】:magento javascript not playing nice with jquerymagento javascript不能很好地与jquery一起使用
【发布时间】:2011-02-27 19:48:50
【问题描述】:

在我的 Magento 网站中加载 jquery 时,让我的自定义 JavaScript 文件在 Google chrome 中正常运行时遇到了一点问题。这个问题似乎只出现在谷歌浏览器中。我已经在 Linux Ubuntu 10.10(chrome 10.0.648.114 beta)和 Windows XP(chrome 9.0.597.98)中测试了这个问题。 FF、Safari、IE好像没有这个问题。

当将jQuery添加到要包含的JS文件中时,我的个人JS文件在发送硬刷新时不起作用(强制对js文件进行200请求)。如果我定期刷新(js 文件的 304 请求)并从缓存中加载它,那么它可以工作。

我已经在我的 magento 站点之外创建了一个虚拟页面,当我包含来自 magento 站点的 JS 文件时,我仍然遇到这个问题。但是,如果我将 JS 文件移到 magento 站点之外,它可以正常工作吗?

我在我的 magento 管理员中禁用了缓存,据我所知,没有任何模块或自定义代码/插件会影响要包含的 JS 文件。

这是位于服务器根目录中的虚拟页面示例

gearlists.js 中唯一的东西是

alert('external');

因此,当我加载该页面时,我会看到两个警报弹出窗口。但在硬刷新时,我只会弹出一个。 “内部”。

如果我转身定期刷新,两个 JS 文件都会从浏览器缓存中加载并带有 304 状态代码,我会看到两个弹出窗口“外部”然后是“内部”

不适用于硬刷新

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
    <head>
        <title>test</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <script type="text/javascript" src="http://VIRTUAL_SERVER_FOR_MAGENTO_SITE/catalog/js/jquery/jquery-1.5.1.js"></script>
        <script type="text/javascript" src="http://VIRTUAL_SERVER_FOR_MAGENTO_SITE/catalog/js/ads/gearlists.js"></script>
        <script type="text/javascript">
            alert('Internal');
        </script>
    </head>
    <body>
    </body>
</html>

始终有效

在这个例子中,如果我将 JS 文件从 magento 虚拟服务器中移出并移到我的服务器的根目录中,一切都会按预期运行。每次页面刷新都会显示两个弹出窗口

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
    <head>
        <title>test</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <script type="text/javascript" src="http://localhost/jquery-1.5.1.js"></script>
        <script type="text/javascript" src="http://localhost/gearlists.js"></script>
        <script type="text/javascript">
            alert('here');
        </script>
    </head>
    <body>
    </body>
</html>

现在,如果我从测试中删除 jquery 文件,我的自定义 js 文件总是可以正常工作,无论它是否通过我的 magento VS 提供...总是有两个弹出窗口。

我有点不知道是什么原因造成的。任何想法将不胜感激。

【问题讨论】:

  • 是否报告了任何 javascript 错误?这种情况下jQuery加载成功了吗?
  • 我没有收到任何 JS 错误,并且 jQuery 在两个实例中都成功加载。
  • 文件存放在什么文件夹中?是 catalog/js/ 还是 Magento 安装在 catalog/ 中并且文件在 js/ 中?检查他们所在的任何文件夹中的.htaccess,这可能会拒绝访问或重写。检查正在提供的文件的内容。您是否知道 Magento 带有 Prototype 并且 jQuery 需要 noConflict(假设您可以使其其余部分正常工作)?
  • Magento 安装在 catalog/ 并且 javascript 文件在 catalog/js/ js 文件夹中没有 .htaccess,但是我检查了 catalog/ 中的 .htaccess 文件并没有找到任何东西看起来它会影响加载。我知道magento带有原型并且不需要冲突,但在这种情况下它甚至无关紧要,因为我只是试图加载驻留在magento站点中的两个文件而不是实际加载magento页面。我很好奇这些文件是否是通过一些操纵它们的代理发送的,但似乎并非如此……我可以说出来。
  • 它在某个实时链接上吗??这样调试会容易得多

标签: javascript jquery google-chrome magento


【解决方案1】:

好的,我想通了。愚蠢的错误,但花了一些时间。文件目录是站点名称的首字母js/ads/gearlists.js

原来我的adblock 扩展使用正则表达式来查找单词“ads”并过滤掉我的脚本。当我将目录从 ads 调整为 adsinc 时,问题就消失了。

因为我的 chrome 扩展已同步,所以 id 在 linux 或 windows 中不起作用是有道理的。

【讨论】:

  • 我已经有好几次了!感谢您发布回复!
【解决方案2】:

两个提示:

您可能希望在 Magento Connect 上安装 mxperts jquery 插件扩展 - 它是免费的,有助于调试人们放在您的 Magento 网站上的 jquery 脚本。

谷歌浏览器没有刷新缓存的已知方法 - 你可以重命名你的 js 文件,然后加载新的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多