【问题标题】:No vaild message received from loaded iframe for iframe没有从加载的 iframe 接收到 iframe 的有效消息
【发布时间】:2013-10-24 01:17:51
【问题描述】:

请在以下方面提供一些帮助。

嗨,Ray,我现在收到了针对 IE7/8 的正确回复。但是它会立即返回,Firefox 正在花时间上传百分比条来指示这一点。我很担心,因为有人可能会上传然后看到它完成然后保存并且视频不会在那里。关于为什么 IE7/8 会立即显示响应的任何建议。希望这是有道理的

感谢您的回复,但仍然无法正常工作。获取上传失败。我是否将响应作为 text/html 或 text/plain 传回

还有关于oncomplete函数的响应日志是正确的吗?

uploader = $jq('#fine-uploader').fineUploader({
        debug: true,
        request: {
            //endpoint: 'http://video-api.shannons.com.au/api/upload/upload.php',
            endpoint: 'http://crowleyroofing.radiusmedia.com.au/uploader-test.php',
            params: {
                ClientToken: token,
                ApplicationResponse: 'FineUploader'
            },
            inputName: 'FileUpload'
        },
        cors: {
            expected: true
        },
        multiple: false,
        validation: {
            allowedExtensions : ['mp4','mov','ogm','ogv','ogx','webm','flv','avi','m4v','mkv','wmv'],
            sizeLimit : 52428800
        },
        showMessage: function(message) {
            $('.video-error').append('<div class="alert alert-error">' + message + '</div>');
        }
    })
    .on('submit', function(event, id) {
        $('.qq-upload-button').hide();
        $('.qq-upload-list').show();
    })
    .on('complete', function(event, id, name, response) {
        console.log(response);
        //$jq('.qq-upload-status-text').html(response);

        /*$jq('#event-post-form').prepend('<input id="mediatoken" type="hidden" name="mediatoken" value="' + response.Data.MediaId + '">');
        var size = $('.qq-upload-size').text();
        var html = '' + name + ' ' + size + ' <span class="icon"><em class="club-tick"></em></span>';
        $jq('.qq-upload-status-text').html(html);*/
    });

这里是 PHP

 <?php

function gen_uuid() {
    return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
        // 32 bits for "time_low"
        mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),

        // 16 bits for "time_mid"
        mt_rand( 0, 0xffff ),

        // 16 bits for "time_hi_and_version",
        // four most significant bits holds version number 4
        mt_rand( 0, 0x0fff ) | 0x4000,

        // 16 bits, 8 bits for "clk_seq_hi_res",
        // 8 bits for "clk_seq_low",
        // two most significant bits holds zero and one for variant DCE1.1
        mt_rand( 0, 0x3fff ) | 0x8000,

        // 48 bits for "node"
        mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff )
    );
}

if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) || (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']!="XMLHttpRequest")) {
    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Allow-Headers: origin, x-requested-with, content-type, cache-control');
    header("Content-Type: text/html");

    $data = array("success" => true, "uuid" => gen_uuid());
    $json = json_encode($data);
    echo "$json <script src=\"http://crowleyroofing.radiusmedia.com.au/iframe.xss.response-3.9.0-3.js\"></script>";
}

?>

这是我从 ie9/8 得到的回复

[FineUploader 3.9.0-3] 收到 1 个文件或输入。

[FineUploader 3.9.0-3] 发送 0 的上传请求

[FineUploader 3.9.0-3] 收到 CORS 上传请求的 iframe 加载事件(iframe 名称 0_89b9b578-b08e-4221-be2b-a1bac04792c8)

[FineUploader 3.9.0-3] 收到如下窗口消息:'{"success":true,"uuid":"9da17ad5-ad6a-40cd-81b5-226e837db45b"}'

[FineUploader 3.9.0-3] 对于 iframe 名称 0_89b9b578-b08e-4221-be2b-a1bac04792c8,未从加载的 iframe 收到有效消息

[FineUploader 3.9.0-3] iframe 已加载

【问题讨论】:

    标签: php jquery iframe fine-uploader


    【解决方案1】:

    对于由 IE9 或更早版本发起的跨域上传,您没有返回正确的响应。 As the documentation states,您必须返回一个 text/html 响应,其中包含一个指向 iframe.xss.response.js 文件的脚本标记,以及一个有效的 JSON 字符串,该字符串包含一个值为 truesuccess 属性和一个 uuid 属性其值等于关联文件的 UUID。

    您的响应代码应如下所示:

    $data = array("success" => true, "uuid" => "9da17ad5-ad6a-40cd-81b5-226e837db45b");
    $json = json_encode($data);
    echo "$json <script src=\"http://crowleyroofing.radiusmedia.com.au/iframe.xss.response-3.9.0-3.js\"></script>";
    

    您需要将uuid 属性的值替换为Fine Uploader 随上传请求发送的qquuid 参数值。

    另外,请注意以下与您的代码无关的问题:

    • 无需启用cors.allowXdr 选项。仅当您在跨源环境中启用了删除文件功能时才使用此选项。
    • debug 选项默认为 false,因此您无需显式设置。
    • cors.sendCredentials 选项默认为false,因此您无需显式设置。

    【讨论】:

    • 嗨,Ray,我在顶部更新了我的问题,但仍然不适合我。
    • 您的代码看起来仍然不正确。如果您使用的是确切的代码,那么它将无法正常工作。正如我所提到的,您必须在响应中包含关联文件的 UUID。您在上面的回复中硬编码了一个 UUID。修复该问题后,如果仍然无法正常工作,则需要包括所有控制台日志消息(debug 设置为 true)和每个 IE9 的网络选项卡的请求/响应数据。
    • 嗨,Ray,我如何在 php 中设置 UUID?
    • 嗨,Ray,上面我也更新了我的代码和 php 上传器代码。您还将看到来自 ie8/9 的响应。还是有问题。
    • 这里有点晚了。我会在早上(大约 9 小时后)回复您的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    相关资源
    最近更新 更多