【问题标题】:jQuery doesn't display images on mobilejQuery 不在移动设备上显示图像
【发布时间】:2015-05-07 00:34:59
【问题描述】:

我正在用 php 制作一个网络应用程序,您可以在一个文件中提交图片并在另一个文件中显示它们。为了处理当人们将多个文件上传到同一个团队时,我想创建一个图片库,但我将图片以二进制形式保存在 txt 文件中,这样我在显示它们时就不必处理文件扩展名。我决定通过显示图像来使用 jQuery 和 AJAX,然后当您单击某些文本时,它会转到下一个文本。一切都在我使用 chrome 的计算机上完美运行,但是当我尝试在移动设备上执行此操作(特别是 chrome 和 ios 上的 safari)时,图片无法加载。有谁知道是什么原因造成的?这是我的代码:

<html>
<head>
<title>Yeti Robotics Scouting</title>
<meta name="viewport" content="width=device-width, intial-scale=1, user-scalable=no" />
<meta name="apple-mobile-web-app-capable" content="yes">
<link href="scouting.css" type="text/css" rel="stylesheet" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script type="text/javascript" src="scouting.js"></script>
</head>
<body>
    <div class="header">
    <nav>
        <a href="/">Yeti Scouting</a> | 
        <a href="/results.php">Results</a> | 
        <a href="/pit.php">Pit Form</a>
        <form class="search" action="team.php" method="get">
            <input type="number" name="team" placeholder="Enter team number" />
            <button type="submit">Go</button>
        </form>
        </nav>
        <hr />
    </div>
<script>
    var picNum = 1; 
    var teamNumber = <?php echo json_encode($_GET['teamNumber']);?>;
    var picLimit = <?php 
        for($i = 1; file_exists("pics/" . $_GET['teamNumber'] . "/" . $i . ".txt"); $i++){}
        echo json_encode($i - 1);?>;

    $(document).ready(function(){
        $.get("get_picture.php?teamNumber=" + teamNumber + "&pic=1", function(data, status) {
            $("#picture").attr("src", data);
        });
        refreshPicNum();
    });

    function previousPicture() {
        if (picNum > 1) {
            picNum--;
        } else {
            picNum = picLimit;
        }
        $(document).ready(function(){
            $.get("get_picture.php?teamNumber=" + teamNumber + "&pic=" + picNum, function(data, status) {
                $("#picture").attr("src", data);
            });
        });
        refreshPicNum();
    }

    function nextPicture() {
        $(document).ready(function() {
            if (picNum < picLimit) {
                picNum++;
            } else {
                picNum = 1;
            }
            $.get("get_picture.php?teamNumber=" + teamNumber + "&pic=" + picNum, function(data, status) {
                $("#picture").attr("src", data);
            });
        });
        refreshPicNum();
    };

    function refreshPicNum() {
        document.getElementById("pic_num").innerHTML = picNum + "/" + picLimit;
    }
</script>
<center><span id='pic_num'></span></center>
<span class='left_arrow' onclick="previousPicture()">
    ← Previous Picture
</span>
<span class='right_arrow'onclick="nextPicture()">
    Next Picture →
</span>
<img id='picture' src='' alt='What? No picture?!?'>
</body>
</html>

编辑:因此无论出于何种原因,该页面似乎都可以在 safari 上运行,但它仍然在 chrome 中显示 img 的 alt。

【问题讨论】:

  • 这些图片真的很大吗,还是有很多?图片是什么格式的?
  • @braks 这些照片是用手机摄像头拍摄的,我唯一可以测试的手机是 iPhone 6,它有一个 8 兆像素的摄像头和保存图片的 txt 文件的大小介于 1,545 KB 和 2,119 KB 之间。

标签: javascript php jquery html ajax


【解决方案1】:

您可能已达到某些 iOS 资源限制

由于iOS上的可用内存,数量有限制 它可以处理的资源:

解码的 GIF、PNG 和 TIFF 图像的最大大小为 3 兆像素 适用于 RAM 小于 256 MB 和 5 兆像素的设备 具有大于或等于 256 MB 的 RAM。也就是说,确保宽度 * 对于 RAM 小于 256 MB 的设备,高度 ≤ 3 * 1024 * 1024。笔记 解码后的尺寸远大于图像的编码尺寸。

JPEG 的最大解码图像大小为 32 兆像素,使用 二次抽样。 JPEG 图像可以高达 32 兆像素,因为 二次采样,它允许 JPEG 图像解码为具有 1 的大小 第十六像素数。大于 2 兆像素的 JPEG 图像 被二次采样——也就是说,被解码为一个减小的大小。 JPEG 二次采样 允许用户查看来自最新数码相机的图像。

canvas 元素的最大尺寸为 3 兆像素,适用于具有 小于 256 MB RAM 和 5 兆像素的设备 等于 256 MB RAM。画布对象的高度和宽度为 150 x 300 像素(如果未指定)。

每个顶层的 JavaScript 执行时间限制为 10 秒 入口点。如果您的脚本执行超过 10 秒,Safari 在 iOS 上停止在代码中的随机位置执行脚本,所以 可能会导致意想不到的后果。

施加此限制是因为 JavaScript 执行可能会导致 main 线程阻塞,所以当脚本运行时,用户无法 与网页交互。

有关如何在 iOS 上调试 JavaScript,请参阅 Safari Web Inspector 指南。

一次最多可以打开 8 个文档 iPhone 和 iPad 上的 9 个。 iOS 注意:在 iOS 1.1.4 及更早版本中, JavaScript 执行时间限制为 5 秒,大小为 分配到 10 MB。此外,画布元素大小的限制 与桌面上的 Safari 相同。在 iOS 2.2.1 及更早版本中, 所有帧的总和需要小于 2 兆像素——也就是说, 宽度 * 高度 * 帧数 ≤ 2 * 1024 * 1024。在 iOS 3.0 和 稍后,该限制一次仅适用于一帧。你还需要 适当调整图像大小。不要依赖浏览器缩放。例如, 不要将 100 x 100 的图像放在 10 x 10 的元素中。瓷砖小 背景图像;不要使用大的背景图片。

这只是其中的一部分,有关更多信息,请参阅此内容:

https://developer.apple.com/library/mac/documentation/AppleApplications/Reference/SafariWebContent/CreatingContentforSafarioniPhone/CreatingContentforSafarioniPhone.html

【讨论】:

  • 图片不太可能是 jpg 格式,更不可能超过 32 兆像素。 ios chrome和safari是否有可能无法处理带有二进制src的img标签?
【解决方案2】:

看起来 iOS Chrome 由于某种原因不能做 jQuery,一定与苹果对待第三方浏览器的方式有关。

【讨论】:

    猜你喜欢
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多