Как передать информацию в iframe через Post в ASP.NET? - PullRequest
1 голос
/ 17 июня 2009

Я хотел бы передать информацию в iframe по почте. (Может быть jquery или javascript, который выполняет сообщение, это не имеет значения).

Информация не может быть отправлена ​​через строку запроса, так как у меня нет доступа к изменению способа отображения страницы в iframe.

Эти данные будут определять макет содержимого в iframe, так как я могу сделать так, чтобы после отправки сообщения обновлялся iframe? (возможно обновить?)

Ответы [ 2 ]

1 голос
/ 17 июня 2009

Я написал в блоге о том, как сделать это с помощью jQuery, чтобы загрузить файл, используя скрытый iframe. Вот код:

Вот HTML-код для формы:

<div id="uploadform">
<form id="theuploadform">
<input type="hidden" id="max" name="MAX_FILE_SIZE" value="5000000" >
<input id="userfile" name="userfile" size="50" type="file">
<input id="formsubmit" type="submit" value="Send File" >
</form>

DIV, в котором для разрешения jQuery создавать iframe вы можете скрыть его с помощью небольшого CSS:

<div id="iframe" style="width:0px height:0px visibility:none">
</div>

DIV, в котором отображаются результаты обратного вызова:

<div id="textarea">
</div>

Код jQuery:

<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
<script type="text/javascript">

$(document).ready(function(){
    $("#formsubmit").click(function() {
        var userFile = $('form#userfile').val();
        var max = $('form#max').val();
        var iframe = $( '<iframe name="postframe" id="postframe" class="hidden" src="about:none" />' );
        $('div#iframe').append( iframe );

        $('#theuploadform').attr( "action", "uploader.php" )
        $('#theuploadform').attr( "method", "post" )
        $('#theuploadform').attr( "userfile", userFile )
        $('#theuploadform').attr( "MAX_FILE_SIZE", max )
        $('#theuploadform').attr( "enctype", "multipart/form-data" )
        $('#theuploadform').attr( "encoding", "multipart/form-data" )
        $('#theuploadform').attr( "target", "postframe" )
        $('#theuploadform').submit();
        //need to get contents of the iframe
        $("#postframe").load(
            function(){
                iframeContents = $("iframe")[0].contentDocument.body.innerHTML;
                $("div#textarea").html(iframeContents); 
            } 
        );
        return false;
    });
});

</script>

Я использовал php-приложение вроде этого uploader.php, чтобы что-то сделать с файлом:

<?php

$uploaddir = 'uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
$maxfilesize = $_POST[MAX_FILE_SIZE];

if ($maxfilesize > 5000000) {
//Halt!
   echo "Upload error:  File may be to large.<br/>";
   exit();
}else{
    // Let it go
}

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
   print('File is valid, and was successfully uploaded. ');
} else {
   echo "Upload error:  File may be to large.<br/>";
}

chmod($uploadfile, 0744);
?>

Там больше, чем нужно, но это иллюстрирует концепцию в jQuery.

0 голосов
/ 17 июня 2009

У меня нет удобного кода, но моя команда сделала это исключительно в Javascript. Насколько я помню, все было примерно так:

function postToPage() {
  var iframe = document.getElementById('myIFrame');

  if (iframe) {
    var newForm = '<html><head></head><body><form...> <input type="hidden" name="..." value="..." /> </form><script type=\"text/javascript\">document.forms[0].submit();</scrip' + 't></body></html>';

    iframe.document.write(newForm);  //maybe wrong, find the iframe's document and write to it
  }
}
...