Имеются ли проблемы совместимости с безопасностью / браузером при отправке формы в iframe? [Дубликат]

Это может быть не самый удобный ответ, но, надеюсь, это поможет! Я на 99% уверен, что это конкретное сообщение об ошибке на самом деле не указывает на реальную проблему. Я потратил несколько часов, вытаскивая свои волосы по этой же самой точной проблеме.

1) У меня была авторизация для печати фотографий на консоли, когда я запускал свой сборщик, 2) Я мог легко перемещаться и выбирать фотографию достаточно легко, и 3) когда я вернусь к своему представлению отбросив сборщик, изображение моей кнопки не было обновлено новой фотографией ... и единственным советом, который я имел к проблеме, было то же самое сообщение об ошибке, которое вы получаете.

Оказывается, я был жесткое кодирование изображения замещающего объекта в ViewWillAppear вместо ViewDidLoad. Каждый раз, когда сборщик увольнялся, он вызывал ViewWillAppear и заменял мое выбранное изображение жестким кодированным изображением. Я исправил эту проблему и, конечно же, все работает нормально ... и я все еще вижу это сообщение об ошибке каждый раз, когда я возвращаюсь из сборщика.

Я рекомендую искать где-то, кроме ImagePicker, для вашего проблема, и вы, скорее всего, найдете ее.

239
задан pnuts 17 September 2015 в 16:16
поделиться

4 ответа

Зависит от того, что вы подразумеваете под «почтовыми данными». Вы можете использовать атрибут HTML target="" в теге <form />, поэтому он может быть таким же простым, как:

<form action="do_stuff.aspx" method="post" target="my_iframe">
  <input type="submit" value="Do Stuff!" />
</form>

<!-- when the form is submitted, the server response will appear in this iframe -->
<iframe name="my_iframe" src="not_submitted_yet.aspx"></iframe>

Если это не так, или вы после чего-то более сложного, отредактируйте ваш вопрос включает более подробные сведения.

Известная ошибка с Internet Explorer, которая возникает только при динамическом создании ваших iframe и т. д. с помощью Javascript (здесь есть ), но если вы используете обычную разметку HTML, вы в порядке. Целевой атрибут и имена фреймов - это не какой-то умный взломанный ниндзя; хотя он был устаревшим (и, следовательно, не подтвержден) в HTML 4 Strict или XHTML 1 Strict, он был частью HTML с 3.2, он формально является частью HTML5, и он работает практически в каждом браузере с Netscape 3.

Я проверил это поведение как работу с XHTML 1 Strict, XHTML 1 Transitional, HTML 4 Strict и в режиме «quirks» без указанного DOCTYPE и работает во всех случаях с помощью Internet Explorer 7.0.5730.13. Мой тестовый пример состоит из двух файлов, с использованием классического ASP на IIS 6; они воспроизводятся здесь полностью, поэтому вы можете проверить это поведение для себя.

default.asp

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC
  "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
  <head>
    <title>Form Iframe Demo</title>
  </head>
  <body>
  <form action="do_stuff.asp" method="post" target="my_frame">
    <input type="text" name="someText" value="Some Text" />
    <input type="submit" />
  </form>
  <iframe name="my_frame" src="do_stuff.asp">
  </iframe>
  </body>
</html>

do_stuff.asp

<%@Language="JScript"%><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC
  "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
  <head>
    <title>Form Iframe Demo</title>
  </head>
  <body>
  <% if (Request.Form.Count) { %>
  You typed: <%=Request.Form("someText").Item%>
  <% } else { %>
  (not submitted)
  <% } %>
  </body>
</html>

I было бы очень интересно услышать о любом браузере, который не правильно запускает эти примеры.

366
ответ дан Community 22 August 2018 в 16:44
поделиться
  • 1
    Как было указано ниже, цель в форме может не работать в IE7 - вы хотите проверить это. – NexusRex 8 February 2011 в 23:23
  • 2
    @NexusRex - проверено, и yep, он отлично работает в IE7. :) – Dylan Beattie 8 February 2011 в 23:46
  • 3
    Проблема с IE 7 заключается в том, что если вы создаете iframe с помощью javascript, тег имени не будет установлен (даже если вы попытаетесь его установить), почему пост-цель не сработает. Решение для IE7: stackoverflow.com/questions/2181385/… – mrD 19 March 2011 в 08:14
  • 4
    Это можно сделать с разных сайтов? (CORS)? – Leandro Tupone 19 November 2014 в 20:49
  • 5
    Есть ли способ сохранить содержимое выходного кадра в файле (например, ответ с сервера, на который была отправлена ​​форма)? – ZeroGraviti 20 July 2016 в 00:39

Эта функция создает временную форму, а затем отправляет данные с помощью jQuery:

function postToIframe(data,url,target){
    $('body').append('<form action="'+url+'" method="post" target="'+target+'" id="postToIframe"></form>');
    $.each(data,function(n,v){
        $('#postToIframe').append('<input type="hidden" name="'+n+'" value="'+v+'" />');
    });
    $('#postToIframe').submit().remove();
}

target - это «имя» attr целевого iFrame, а данные - объект JS:

data={last_name:'Smith',first_name:'John'}
0
ответ дан Dr Fred 22 August 2018 в 16:44
поделиться

IFrame используется для вставки другого документа внутри html-страницы.

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

Задайте целевой атрибут формы имени тега iframe.

<form action="action" method="post" target="output_frame">
    <!-- input elements here --> 
</form>
<iframe name="output_frame" src="" id="output_frame" width="XX" height="YY">
</iframe>           

Расширенное использование цели iframe. Это свойство также можно использовать для создания ajax like experience, особенно в таких случаях, как загрузка файлов, и в этом случае, когда становится обязательным подавать форму, чтобы загрузить файлы

В iframe можно установить ширину и высоту 0 и форма может быть отправлена ​​с целевым значением, установленным в iframe, и диалогом загрузки, открытым перед отправкой формы. Таким образом, он издевается над ajax-контролем, поскольку элемент управления все еще остается на входной форме jsp, при этом открывается диалоговое окно загрузки.

Exmaple

<script>
$( "#uploadDialog" ).dialog({ autoOpen: false, modal: true, closeOnEscape: false,                 
            open: function(event, ui) { jQuery('.ui-dialog-titlebar-close').hide(); } });

function startUpload()
{            
    $("#uploadDialog").dialog("open");
}

function stopUpload()
{            
    $("#uploadDialog").dialog("close");
}
</script>

<div id="uploadDialog" title="Please Wait!!!">
            <center>
            <img src="/imagePath/loading.gif" width="100" height="100"/>
            <br/>
            Loading Details...
            </center>
 </div>

<FORM  ENCTYPE="multipart/form-data" ACTION="Action" METHOD="POST" target="upload_target" onsubmit="startUpload()"> 
<!-- input file elements here--> 
</FORM>

<iframe id="upload_target" name="upload_target" src="#" style="width:0;height:0;border:0px solid #fff;" onload="stopUpload()">   
        </iframe>
19
ответ дан kapil 22 August 2018 в 16:44
поделиться
0
ответ дан Dominique Fortin 5 November 2018 в 14:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: