我遇到了基于Sencha Touch的应用程序的生产构建版本无法在IE10和Chrome中正确应用样式的问题。
重现步骤:
主.js
Ext.define('Lab.view.Main', {
extend: 'Ext.Panel',
xtype: 'main',
requires: [
],
config: {
tabBarPosition: 'bottom',
items: [
{
xtype: 'panel',
cls: 'MyFirstLogo',
itemId: 'firstLogo'
} ]
}
});
SCSS 文件 - app.scss
.MyFirstLogo{
height: auto !important;
min-height: 100px;
min-width: 404px;
padding: 0px;
background-image:url(../../resources/images/test1.jpeg);
background-repeat:no-repeat;
background-position: left;
}
确保背景图像 URL 在 resources/sass/app.scss -
../../resources/images/test1.jpeg
中是这样的。在项目根目录(实验室/)中运行"煎茶应用程序构建生产"
在IE10 64位(Win 7)中访问应用程序:
http://localhost/lab/build/production/Lab/
IE10 中根本不显示图像。但是,在Chrome中尝试此操作时,它运行良好。Chrome以某种方式能够将
../../resources/images/test1.jpeg
转换为http://localhost/lab/build/production/Lab/resources/images/test1.jpeg
,但IE10没有这样做并且无法显示图像。这样,它也可以在我的本地开发环境中工作,因为它与我的项目结构相匹配。为了使它在IE10中工作,我将图像URL从
../../resources/images/test1.jpeg
更改为资源/sass/app.scss中的resources/images/test1.jpeg
(这实际上是有意义的,因为资源/目录在项目根目录中),并重建它用于生产。在这种情况下,图像开始出现在IE10中,但现在当我使用Chrome时 - 图像没有显示,Chrome正在尝试从这个URL中检索图像,这是不正确的:http://localhost/lab/build/production/Lab/resources/css/resources/images/test1.jpeg
,并且失败了。这样它在我的本地开发环境中也不起作用。此问题发生在其他资源以及"字体"上。
您能否帮助我了解Sencha的生产构建版本无法同时在IE10和Chrome中运行的情况?这是Sencha Touch或Chrome的错误还是我在这里缺少一些东西?
煎茶触摸中已知的错误,得到了煎茶人的证实。检查此链接:http://www.sencha.com/forum/showthread.php?266275。感谢@peter和@arthurakay的帮助。如果我需要解决方法或对此进行进一步讨论。我将再次开始讨论。谢谢大家!
为什么要在相对文件路径中返回这么多目录?
无论您是在开发还是生产中,CSS 文件都位于:
{app_root}/resources/css/app.css
假设您的图像在这里:
{app_root}/resources/images/
。那么你的文件路径应该看起来像这样:
background-image:url(../images/test1.jpeg);
仅供参考,我假设触摸 2.3 和 Cmd 4.0.x,因为您没有指定。
- 您访问应用程序的地址(在任何浏览器中)将成为页面基址。在您的情况下,它
http://localhost/lab/build/production/Lab/
您可以通过打印alert(document.location.href)
来确认这一点。
请检查尾部斜杠。 - 地址
../../resources/images/test1.jpeg
则表示http://localhost/lab/build/production/Lab/../../resources/images/test1.jpeg
并转换为不正确
http://localhost/lab/build/resources/images/test1.jpeg
- 修改相对地址以
../resources/images/test1.jpeg
获取
http://localhost/lab/build/production/resources/css/resources/images/test1.jpeg
您始终可以通过在浏览器的地址栏中输入结果地址来验证该地址。
IE和Chrome都可以正确转换路径,因为这是它们的基本任务。
我找到了一种解决方法,可以使图像/图标在IE10和Chrome上都可见。
在这里,为任何包含"背景图像"的给定类提供的CSS属性应该包含IE10和Chrome的工作URL,如下所示:
.menuHome {
background:url(resources/icons/menu/Home.png),url(../icons/menu/Home.png) no-repeat center;
}
在这里,两个 URL 都存在于 CSS 属性中。因此,IE10 将从第一个网址获取图像,Chrome 将从第二个网址获取图像。