आप एक आइफ्रेम पर पोस्ट कैसे करते हैं?


जवाबों:


407

निर्भर करता है कि आप "पोस्ट डेटा" से क्या मतलब है। आप target=""एक <form />टैग पर HTML विशेषता का उपयोग कर सकते हैं , इसलिए यह उतना ही सरल हो सकता है:

<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>

यदि ऐसा नहीं है, या आप कुछ अधिक जटिल हैं, तो कृपया अपने प्रश्न को संपादित करें और अधिक विवरण शामिल करें।

इंटरनेट एक्सप्लोरर के साथ एक ज्ञात बग है जो केवल तब होता है जब आप गतिशील रूप से अपने आइफ्रेम इत्यादि का निर्माण कर रहे होते हैं, जावास्क्रिप्ट का उपयोग करते हुए (यहां एक काम-आस-पास ), लेकिन यदि आप साधारण HTML मार्कअप का उपयोग कर रहे हैं, तो आप ठीक हैं। लक्ष्य विशेषता और फ्रेम नाम कुछ चतुर निंजा हैक नहीं है; हालाँकि यह HTML 4 स्ट्रिक्ट या XHTML 1 स्ट्रिक्ट में पदावनत (और इसलिए मान्य नहीं होगा), यह 3.2 के बाद से HTML का हिस्सा है, यह औपचारिक रूप से HTML5 का हिस्सा है, और यह नेटस्केप 3 के बाद से हर ब्राउज़र के बारे में काम करता है।

मैंने इस व्यवहार को XHTML 1 सख्त, XHTML 1 संक्रमणकालीन, HTML 4 सख्त और "quirks मोड" में बिना किसी DOCTYPE के साथ काम करने के रूप में सत्यापित किया है, और यह इंटरनेट एक्सप्लोरर 7.0.5730.13 का उपयोग करके सभी मामलों में काम करता है। मेरे परीक्षण मामले में दो फाइलें शामिल हैं, 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>

मुझे ऐसे किसी भी ब्राउज़र के बारे में सुनने में बहुत दिलचस्पी होगी जो इन उदाहरणों को सही ढंग से नहीं चलाता है।


1
जैसा कि नीचे बताया गया था, प्रपत्र पर लक्ष्य IE7 में काम नहीं कर सकता है - आप इसका परीक्षण करना चाहते हैं।
NexusR

12
IE 7 के साथ समस्या यह है कि यदि आप जावास्क्रिप्ट का उपयोग कर जावास्क्रिप्ट उत्पन्न करते हैं तो नाम टैग सेट नहीं है (भले ही आप इसे सेट करने का प्रयास करें) क्यों पोस्ट लक्ष्य विफल हो जाएगा। IE7 का समाधान: stackoverflow.com/questions/2181385/…
mrD

क्या आउटपुट फ़्रेम की सामग्री को एक फ़ाइल में सहेजने का एक तरीका है (उदाहरण के लिए, सर्वर से प्रतिक्रिया जिसे फ़ॉर्म सबमिट किया गया है)?
ज़ीरोग्रैविटी

@ZeroGraviti यह स्पष्ट नहीं है कि आपका "फ़ाइल को सहेजने" से क्या मतलब है। क्या तुम कर सकते हो एक IFRAME के लिए फ़ॉर्म सबमिट करेंगे, और में बताए अनुसार प्रतिक्रिया एक सामग्री-विन्यास हैडर सेट है stackoverflow.com/questions/1012437/... - एक IFRAME ताकि उपयोगकर्ता क्लिक करता है "सबमिट करें", यह पोस्ट, ब्राउज़र प्रतिक्रिया प्राप्त करता है और उपयोगकर्ता को अपनी स्थानीय मशीन में फ़ाइल को सहेजने का संकेत देता है। क्या आप उसके बाद हैं?
डायलन बीटी

@DylanBeattie, मुझे अपना usecase स्पष्ट करने दें। मैं एक iframe जो targetएक html के लिए विशेषता के रूप में सेट किया गया है आबाद करने में सक्षम है <form>। प्रपत्र पोस्ट होने के बाद और मैं लक्ष्य iframe में सामग्री देख सकता हूं, मैं इस सामग्री को फ़ाइल में सहेजने के लिए उपयोगकर्ता को एक विकल्प प्रदान करना चाहता हूं। यह वही है जो मैं पूछना चाहता था। मुझे पता है कि अगर यह अधिक स्पष्टता की जरूरत है।
ज़ीरोग्रैवी

25

एक iframe का उपयोग html पेज के अंदर किसी अन्य दस्तावेज़ को एम्बेड करने के लिए किया जाता है।

यदि फॉर्म को पेज के भीतर एक आइफ्रेम में जमा किया जाना है, तो टैग के लक्ष्य विशेषता का उपयोग करके इसे आसानी से प्राप्त किया जा सकता है।

फॉर्म की लक्ष्य विशेषता को 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 लक्ष्य का उपयोग करें।
इस संपत्ति का उपयोग अनुभव जैसे अजाक्स का उत्पादन करने के लिए भी किया जा सकता है, विशेष रूप से फाइल अपलोड जैसे मामलों में, जिस स्थिति में फाइल जमा करने के लिए फॉर्म जमा करना अनिवार्य हो जाता है।

Iframe को 0 की चौड़ाई और ऊँचाई पर सेट किया जा सकता है, और फ़ॉर्म को iframe पर निर्धारित लक्ष्य के साथ सबमिट किया जा सकता है, और फ़ॉर्म सबमिट करने से पहले खोला गया एक लोडिंग संवाद। इसलिए, यह एक अजाक्स नियंत्रण को नियंत्रित करता है क्योंकि नियंत्रण अभी भी इनपुट फॉर्म jsp पर बना हुआ है, जिसमें लोडिंग संवाद खुला है।

उदाहरण के

<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>

धन्यवाद, यह महत्वपूर्ण है कि <iframe> </ form> के बाद होना चाहिए जैसा कि आपने लिखा है
Igor Fomenko

2

यह फ़ंक्शन अस्थायी रूप बनाता है, फिर 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();
}

लक्ष्य iFrame का 'नाम' attr है, और डेटा एक JS ऑब्जेक्ट है:

data={last_name:'Smith',first_name:'John'}

0

यदि आप iframe में जानकारी बदलना चाहते हैं तो उस iframe से फ़ॉर्म सबमिट करें, यह करें

...
var el = document.getElementById('targetFrame');

var doc, frame_win = getIframeWindow(el); // getIframeWindow is defined below

if (frame_win) {
  doc = (window.contentDocument || window.document);
}

if (doc) {
  doc.forms[0].someInputName.value = someValue;
  ...
  doc.forms[0].submit();
}
...

आम तौर पर, आप केवल ऐसा कर सकते हैं यदि iframe में पृष्ठ उसी मूल से है, लेकिन आप उसी मूल नीति को अस्वीकृत करने और किसी भी पृष्ठ पर परीक्षण करने के लिए Chrome को डीबग मोड में प्रारंभ कर सकते हैं।

function getIframeWindow(iframe_object) {
  var doc;

  if (iframe_object.contentWindow) {
    return iframe_object.contentWindow;
  }

  if (iframe_object.window) {
    return iframe_object.window;
  } 

  if (!doc && iframe_object.contentDocument) {
    doc = iframe_object.contentDocument;
  } 

  if (!doc && iframe_object.document) {
    doc = iframe_object.document;
  }

  if (doc && doc.defaultView) {
   return doc.defaultView;
  }

  if (doc && doc.parentWindow) {
    return doc.parentWindow;
  }

  return undefined;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.