আপনি কিভাবে একটি iframe পোস্ট করবেন?


উত্তর:


407

"পোস্ট ডেটা" দ্বারা আপনি কী বোঝাতে চান তা নির্ভর করে। আপনি 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>

যদি এটি না হয় বা আপনি আরও জটিল কিছু পরে চলেছেন তবে আরও বিস্তারিত অন্তর্ভুক্ত করতে দয়া করে আপনার প্রশ্নটি সম্পাদনা করুন।

সেখানে যে শুধুমাত্র ঘটে যখন আপনি পরিবর্তনশীল, আপনার অনুরোধকে তৈরি করছেন ইত্যাদি জাভাস্ক্রিপ্ট ব্যবহার ইন্টারনেট এক্সপ্লোরার সঙ্গে একটি পরিচিত বাগ সংশোধন করা হয় (একটি এর কাজ প্রায় এখানে ), কিন্তু আপনি সাধারণ HTML মার্কআপ করছি জরিমানা ব্যবহার করছেন, তাহলে আপনাকে। লক্ষ্য বৈশিষ্ট্য এবং ফ্রেমের নামগুলি কিছু চালাক নিনজা হ্যাক নয়; যদিও এটি এইচটিএমএল 4 স্ট্রাইক বা এক্সএইচটিএমএল 1 স্ট্রাইকটিতে অবহিত করা হয়েছে (এবং তাই এটি বৈধতা দেবে না), এটি ৩.২ থেকে এটি HTML এর অংশ হয়ে গেছে, এটি আনুষ্ঠানিকভাবে এইচটিএমএল 5 এর অংশ, এবং নেটস্কেপ 3-এর পরে এটি প্রায় প্রতিটি ব্রাউজারে কাজ করে।

আমি এই আচরণটি এক্সএইচটিএমএল 1 স্ট্রাইক্ট, এক্সএইচটিএমএল 1 ট্রানজিশনাল, এইচটিএমএল 4 স্ট্রাইক এবং "কুইর্কস মোডে" কোনও ডক্টইপিইপি নির্দিষ্ট না করে কাজ করে যাচাই করেছি এবং এটি ইন্টারনেট এক্সপ্লোরার 7.0.5730.13 ব্যবহার করে সমস্ত ক্ষেত্রে কাজ করে। আমার পরীক্ষার ক্ষেত্রে দুটি ফাইল রয়েছে, আইআইএস 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
যেমন নীচের দিকে ইঙ্গিত করা হয়েছিল, ফর্মের লক্ষ্য আইই 7 তে কাজ করতে পারে না — আপনি এটি পরীক্ষা করতে চাইবেন।
NexusRex

12
আইই 7 এর সমস্যাটি হ'ল আপনি জাভাস্ক্রিপ্ট ব্যবহার করে যদি আইফ্রেমে জেনারেট করেন তবে নাম ট্যাগটি সেট করা নেই (আপনি এটি সেট করার চেষ্টা করলেও) কেন পোস্টের লক্ষ্যটি ব্যর্থ হবে। IE7 সমাধান: stackoverflow.com/questions/2181385/...
MRD

কোনও ফাইলে আউটপুট ফ্রেমের সামগ্রী সংরক্ষণ করার কোনও উপায় আছে (উদাহরণস্বরূপ, যে ফর্মটি জমা দেওয়া হয়েছে সেই সার্ভারের প্রতিক্রিয়া)?
জিরোগ্রাভিটি

@ জিরোগ্রাভিটি "একটি ফাইলে সংরক্ষণ করুন" বলতে আপনার অর্থ কী তা সম্পূর্ণ পরিষ্কার নয়। আপনি যা করতে পারেন তা ফর্মটি আইএফআরএমে জমা দেওয়া, এবং প্রতিক্রিয়াটি স্ট্যাকওভারফ্লো / প্রশ্নগুলি ১০১২৪৪77/২ তে বর্ণিত হিসাবে একটি বিষয়বস্তু-বিশৃঙ্খলা শিরোনাম সেট করে - তাই ব্যবহারকারী "জমা দিন" ক্লিক করে, এটি একটি আইএফআরএমে পোস্ট করে, ব্রাউজারটি প্রতিক্রিয়া গ্রহণ করে এবং ব্যবহারকারীকে তাদের স্থানীয় মেশিনে ফাইলটি সংরক্ষণ করার অনুরোধ জানায়। আপনি কি এই পরে আছেন?
ডিলান বিটি

@ ডিলানবিটেটি, আমাকে আমার ইউজকেস পরিষ্কার করতে দিন। আমি একটি ইফ্র্রেমে পপুলেট করতে সক্ষম হয়েছি যা targetএইচটিএমএলের জন্য বৈশিষ্ট্য হিসাবে সেট করা হয়েছে <form>। ফর্মটি পোস্ট হওয়ার পরে এবং লক্ষ্যটি যদি আমি আইফ্রেমে দেখতে পাই তবে আমি এই লিখিত সামগ্রীটি কোনও ফাইলে সংরক্ষণ করতে একটি বিকল্প সরবরাহ করতে চাই। এই আমি জিজ্ঞাসা বোঝাতে চেয়েছিলেন। এর আরও স্বচ্ছতার প্রয়োজন হলে আমাকে জানান know
জিরোগ্রাভিটি

25

এইচটিএমএল পৃষ্ঠার ভিতরে অন্য ডকুমেন্ট এম্বেড করার জন্য একটি আইফ্রেমে ব্যবহার করা হয়।

ফর্ম পৃষ্ঠার মধ্যে যদি কোনও আইফ্রেমে ফর্মটি জমা দিতে হয়, তবে তা ট্যাগের টার্গেট অ্যাট্রিবিউটটি ব্যবহার করে সহজেই অ্যাকসিভ করা যায়।

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 এ লক্ষ্য সেট করে ফর্মটি জমা দেওয়া যেতে পারে এবং ফর্ম জমা দেওয়ার আগে একটি লোডিং ডায়ালগ খোলা হয়। সুতরাং, এটি একটি এজ্যাক্স নিয়ন্ত্রণকে উপহাস করে কারণ নিয়ন্ত্রণটি এখনও ইনপুট ফর্ম জেএসপিতে থাকে, লোডিং ডায়ালগটি খোলে।

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>

ধন্যবাদ, আপনার লেখার মতো <iframe> অবশ্যই </ form> এর পরে হওয়া জরুরী
ইগোর ফোমেঙ্কো

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();
}

লক্ষ্যটি হ'ল আইফ্রেমের 'নাম' অ্যাটর এবং ডেটা একটি জেএস অবজেক্ট:

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

0

আপনি যদি কোনও আইফ্রেমে ইনপুট পরিবর্তন করতে চান তবে সেই আইফ্রেমে ফর্মটি জমা দিন, এটি করুন

...
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();
}
...

সাধারণত, আপনি কেবল তখনই এটি করতে পারেন যদি ইফ্রামের পৃষ্ঠাটি একই উত্স থেকে আসে তবে একই উত্স নীতি উপেক্ষা করতে এবং কোনও পৃষ্ঠাতে এটি পরীক্ষা করতে আপনি কোনও ডিবাগ মোডে 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;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.