【问题标题】:Phonegap images not showingPhonegap 图像未显示
【发布时间】:2016-03-29 12:19:32
【问题描述】:

我无法让我的图像在我的 phonegap 版本中工作。

我读到绝对路径可能不起作用,所以我尝试了绝对路径和相对路径,仍然没有运气。

我包括这样的图像:

<Col key={1} xs={3}>
  <Image src='/tire_selected.png' responsive />
</Col>

或相对

<Col key={1} xs={3}>
  <Image src='tire_selected.png' responsive />
</Col>

等于

<img class="img-responsive" src="tire_deselected.png" data-reactid=".0.0.1.0.0.0.0.1.1.0.0.$4.0">

Col & Image 是使用 bootstrap-react 的引导辅助组件。这一切在 web 视图中都可以正常工作,但在使用 phonegap 构建时就不行了。不过,源代码应该已经编译并且在这两种情况下都没有错误。

以下是我的 config.xml

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.app.exampleapp" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0">
    <name>App</name>
    <description>
    App
    </description>
    <author email="support@example.com" href="http://www.example.com">
        Author
    </author>
    <content src="index.html" />
    <preference name="permissions" value="none" />
    <preference name="orientation" value="default" />
    <preference name="target-device" value="universal" />
    <preference name="fullscreen" value="true" />
    <preference name="webviewbounce" value="true" />
    <preference name="prerendered-icon" value="true" />
    <preference name="stay-in-webview" value="false" />
    <preference name="ios-statusbarstyle" value="black-opaque" />
    <preference name="detect-data-types" value="true" />
    <preference name="exit-on-suspend" value="false" />
    <preference name="show-splash-screen-spinner" value="true" />
    <preference name="auto-hide-splash-screen" value="true" />
    <preference name="disable-cursor" value="false" />
    <preference name="android-minSdkVersion" value="14" />
    <preference name="android-installLocation" value="auto" />
    <gap:plugin name="org.apache.cordova.geolocation" />
    <icon src="icon.png" />
    <access origin="*" />
    <plugin name="cordova-plugin-whitelist" version="1" />
    <allow-intent href="http://*/*" />
    <allow-intent href="https://*/*" />
    <allow-intent href="tel:*" />
    <allow-intent href="sms:*" />
    <allow-intent href="mailto:*" />
    <allow-intent href="geo:*" />
    <platform name="android">
        <allow-intent href="market:*" />
    </platform>
    <platform name="ios">
        <allow-intent href="itms:*" />
        <allow-intent href="itms-apps:*" />
    </platform>
</widget>

Git 仓库:

    app.js
    vendor.js
    config.xml
    favicon.ico
    humans.txt
    index.html
    robots.txt
    tire_deselected.png
    tire_selected.png

Icon.png 工作正常。我不知道是什么导致其他图像不起作用。任何帮助将不胜感激!

编辑

我已经尝试设置 content-security-policy,如果这是我无法设置 img-src 并通过 javascript 显示图像的问题。

<meta http-equiv="Content-Security-Policy" content="
  default-src http://10.3.10.104/ 'self' * 'unsafe-inline';
  style-src http://10.3.10.104/ 'self' * 'unsafe-inline';
  img-src http://10.3.10.104/ 'self' * 'unsafe-inline';
  script-src http://10.3.10.104/ 'self' * 'unsafe-inline';">

但还是没有运气

file:///tire_deselected.png net::ERR_FILE_NOT_FOUND

那里有文件,因为在将 img-element 插入 index.html 时它会显示出来。

我什至尝试通过运行开发者工具的源文件夹中显示的路径来访问它。

file:///data/user/0/com.oas.exampleapp/files/downloads/app_dir/tire_deselected.png 

也不行,我开始认为phonegap坏了,至少与react结合起来效果很差。

【问题讨论】:

  • 我添加了引导标签。这似乎与 Phonegap 无关。
  • 怎么样?除了 phonegap 构建应用程序时,图像在任何地方都可以正常工作。问题与引导无关。
  • 不同意。这不是电话间隙问题。如果您删除引导程序并使用标准 HTML,则会显示图像。唯一的例外*可能*是图像存储在设备之外 - 事实并非如此。既然你认为自己更聪明 - 祝你好运。
  • HTML 是标准的 HTML,它是经过编译的。如果不清楚,我很抱歉。但是你应该知道,如果你从 git repo 构建了一个 phonegap 应用程序。
  • 给我20分钟

标签: image reactjs phonegap-build


【解决方案1】:

编译后build.phonegap.com 将源文件放入“www”目录。

您可以使用以下路径“/android_asset/www/”访问您的本地图像文件

<image src='/android_asset/www/tire_selected.png' responsive />

如果您的图像放置在根目录内的子目录中,那么您可以使用以下内容:

<image src='/android_asset/www/sub-direcctory/tire_selected.png' responsive />

注意:如果有包含本地图像文件的“子目录”,请将其替换为您自己的。

【讨论】:

  • 谢谢!明天我会检查并确认图像在该路径内。
  • 当然,试一试,让我知道它是否有效。
  • 我在使用 react with phonegap 时遇到了同样的问题,这个解决方法可以解决问题,但是为什么需要这样设置 src?我知道 /android_asset/www 是 phonegap 放置文件夹/资产的物理位置,但是如果我在反应渲染空间之外对 img (html) 元素进行硬编码,使用不带 /android_asset/www 的 img 的 src,会产生奇迹,这让我认为,由于某种原因,react 对路径做了一些奇怪的事情
  • 我在想 react 发生的事情是 HTML 正在通过 javascript 注入页面,类似于设置背景图像 url,图像的路径相对于 css 文件的位置。我尝试在我的 webpack.config 中使用相对路径,但这不起作用。我认为 react img src 值的绝对路径可能是唯一的方法。
【解决方案2】:

我在 index.html 中添加了一个 img 标签,并将 src 属性设置为“images/logo.png”,它可以正常加载。

...
  <body>
    <div id="root"></div>
      <img id="footer-logo" src="images/logo.png" style="background-color: black; width: 200px;" />
    <script type="text/javascript" src="cordova.js"></script>
    <script type="text/javascript" src="js/index.js"></script>
    <script src="js/vendor.bundle.js"></script>
    <script src="js/app.bundle.js?v=2"></script>
  </body>
</html>

我有一个带有 img 标签和相同 src 值“images/logo.png”的 react 组件

...
<div style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin: 0px; padding-top: 0px; letter-spacing: 0px; font-size: 24px; font-weight: 400; color: rgb(48, 48, 48); height: 64px; line-height: 64px; flex: 1 1 0px; text-align: center;">
  <img id="header-logo" src="images/logo.png" style="width: 105px; margin-top: 16px;">
</div>
...

react 组件中的 img 没有加载; 404.然而这等于真的

document.getElementById('footer-logo').src === document.getElementById('header-logo').src

为什么其中一张图片加载而另一张没有?是和react组件动态加载到DOM还是react的虚拟DOM有关系?

src 属性等同于file:///images/logo.png。如果我像这样在#header-logo 上设置 src 属性,它会加载:

document.getElementById('header-logo').src = cordova.file.applicationDirectory + "www/images/logo.png"

希望这能为这种非常奇怪的行为提供更多信息。

【讨论】:

    【解决方案3】:

    希望这会有所帮助。所以我也遇到了问题。

    我所做的是,创建另一个文件夹 /images/(重复)并仍然使用我通过我的 /static/components/images 文件夹进行反应导入的图像。您可以通过添加分期或实时条件来更进一步。

    所以答案就在这里。

    import Logo from '../images/logo.png';
    <img src={`./${Logo}`} alt="Logo" />
    

    完整示例:

    import React, { Component } from 'react';
    import Logo from '../images/logo.png';
    
    class Header extends Component {
        render() {
            return(
                <div className="logo mt-3">
                    <img src={`./${Logo}`} alt="Logo" />
                </div>
            );
        }
    }
    
    export default Header;
    

    从这篇文章中得到了这个想法。:Images not showing in PhoneGap Build application

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      • 2016-02-05
      • 1970-01-01
      相关资源
      最近更新 更多