JQuery সহ একটি iframe পুনরায় লোড করুন


150

আমার একটি পৃষ্ঠায় দুটি আইফ্রেমে রয়েছে এবং একটিতে অন্যটিতে পরিবর্তন হয় তবে অন্য আইফ্রেমে আমি রিফ্রেশ না হওয়া পর্যন্ত পরিবর্তনটি দেখায় না। JQuery এর সাথে এই আইফ্রেমে রিফ্রেশ করার কি সহজ উপায় আছে?

<div class="project">
  <iframe id="currentElement" class="myframe" name="myframe" src="http://somesite.com/something/new"></iframe>
</div>

3
যদি আইফ্রেমে ডকুমেন্টটি অন্য কোনও ডোমেনে থাকে?
পেক্কা

আইফ্রেমে প্রদর্শিত সাইটের কোডটিতে কি আপনার অ্যাক্সেস রয়েছে?
ম্যাট আসবুরি

আরও কোডগুলি দেখান - উভয় আইফ্রেমগুলির জন্য এইচটিএমএল এবং আপনি যে জাভাস্ক্রিপ্ট কোডটি ব্যবহার করছেন তা পরিবর্তন করতে। আপনি এখন পর্যন্ত যা অন্তর্ভুক্ত করেছেন কেবল এটিই কী সমস্যা দেখছে তা নির্ধারণ করা কঠিন।
বেন লি

আমার কাছে হ্যাঁ
কোডটিতে

@ ম্যাট, ফ্রেমগুলিকে অন্যান্য ডোমেনের ফ্রেমের সামগ্রীতে পরিবর্তন করার অনুমতি নেই। এই ক্রস-ডোমেন স্ক্রিপ্টিং বিধিনিষেধের চারপাশে কীভাবে কাজ করা যায় তার উদাহরণগুলির জন্য এটি দেখুন: সফ্টওয়্যার
বেন লি

উত্তর:


174

যদি iframe অন্য কোনও ডোমেনে না থাকে তবে আপনি এরকম কিছু করতে পারেন:

document.getElementById(FrameID).contentDocument.location.reload(true);

তবে যেহেতু iframe অন্য কোনও ডোমেনে রয়েছে তাই আপনাকে একই-উত্স নীতিcontentDocument দ্বারা iframe এর সম্পত্তি অ্যাক্সেস থেকে বঞ্চিত করা হবে ।

তবে আপনি হ্যাকিশে যদি ক্রস-ডোমেনটি iframe পুনরায় লোড করতে বাধ্য করতে পারেন যদি আপনার কোডটি iframe এর প্যারেন্ট পৃষ্ঠায় চলমান থাকে তবে এটির সাথে এটির src বৈশিষ্ট্যটি সেট করে। এটার মত:

// hackishly force iframe to reload
var iframe = document.getElementById(FrameId);
iframe.src = iframe.src;

আপনি অন্য আইফ্রেম থেকে আইফ্রেম পুনরায় লোড করার চেষ্টা হয়, আপনি ভাগ্য আউট হয়, যে হয় না সম্ভব।


19
তাঁর প্রশ্ন ছিল কীভাবে জাভাস্ক্রিপ্ট নয় - এটি jQuery দিয়ে সম্পন্ন করবেন। সঠিক jQuery উত্তরের জন্য নীচে সিম বিদাদের পোস্ট দেখুন।
ফাস্টট্র্যাক

2
স্ক্রিপ্টটি আমার আই 9 তে কাজ করে না (অন্যান্য সংস্করণ পরীক্ষা করে না)। পরিবর্তন contentDocument করার contentWindow এটা IE9 কাজ করে তোলে। document.getElementById(FrameID).contentWindow.location.reload(true);
হান তিনি

3
এটি আমার পক্ষে কাজ করেনি, তবে আমি এর iframe.contentDocument.location=iframe.src; পরিবর্তে এমন কিছু করেছি যা দুর্দান্ত কাজ করেছে
গ্লাইচাইম

3
এই জ্যাকুরি আমার জন্য কবিতার মতো কাজ করেছিল:$('#map_iframe').attr('src', $('#map_iframe').attr('src'));
টোফার হান্ট

234
$( '#iframe' ).attr( 'src', function ( i, val ) { return val; });

2
আইডিটিতে কেবল একটি রেফারেন্স থাকার জন্য +1, একটিতে পরিবর্তিত হওয়ার সম্ভাবনা কম তবে অন্যটি ভুলে যান
ম্যাথু লক

1
@NicolaeSurdu এছাড়াও, এই:(function (elem) { elem.src = elem.src; }($('#iframe')[0]));
Sime Vidas

1
অন্য আইফ্রেমে অন্য আইফ্রেমে পুনরায় লোড করতে এখানে পরিবর্তন করুন: $ ('# iframe', window.parent.docament) .attr ('src', ফাংশন (i, ভাল) {রিটার্ন ভাল;});
টিলিটো

ইন্টারনেট এক্সপ্লোরারে জাভাস্ক্রিপ্ট সমাধানগুলি ঠিক মতো document.getElementById(FrameID).contentWindow.location.reload(true);কাজ করছে না। এই উত্তরটি আরও ভাল কাজ করে।
বায়াজক্যাপলান

54

আপনি jquery ব্যবহার করতে পারেন। অ্যালেক্স কেবল জ্যাকুয়ারি ব্যবহার করে এটি প্রস্তাব করেছিল:

 $('#currentElement').attr("src", $('#currentElement').attr("src"));

3
এই সমাধানের সুবিধা হ'ল পাঠযোগ্যতা। বিদাসের উত্তরের মতো দক্ষ না হলেও, এটি যা ঘটছে তা স্পষ্ট।
রবার্ট এগিগিন্টন

আমি সম্মত, আমিও এই সমাধানটির পঠনযোগ্যতা পছন্দ করি
Yonatan Naor

var f = $('#iframeX') ; f.attr( 'src', f.attr( 'src' ))বজায় রাখা এবং পড়তে আরও দৃ
rob়

9

JQuery সহ একটি iframe পুনরায় লোড করুন

iframe এর ভিতরে একটি লিঙ্ক তৈরি করুন আইডি = "পুনরায় লোড" দিয়ে বলতে দিন নীচের কোডটি ব্যবহার করুন

$('#reload').click(function() {
    document.location.reload();
});

এবং আপনি সমস্ত ব্রাউজারের সাথে যেতে ভাল।

এইচটিএমএল (কোনও জাভা স্ক্রিপ্টের রেকর্ড নেই) দিয়ে একটি আইফ্রেম পুনরায় লোড করুন

এটির আরও সহজ সমাধান রয়েছে: যা জাভা স্ক্রিপ্ট ছাড়াই কাজ করে (এফএফ, ওয়েবকিট)

আপনার আইফ্রেমে কেবলমাত্র একটি অ্যাঙ্কর তৈরি করুন

   <a href="#" target="_SELF">Refresh Comments</a>

আপনি যখন এই অ্যাঙ্করটি ক্লিক করেন এটি আপনার আইফ্রেমটি সতেজ করুন

তবে আপনার যদি আপনার আইফ্রেমে প্যারামিটার প্রেরণ থাকে তবে নিম্নলিখিত হিসাবে এটি করুন।

  <a id="comnt-limit" href="?id=<?= $page_id?>" target="_SELF">Refresh Comments</a>

কোনও পৃষ্ঠার ইউআরএল দরকার নেই কারণ -> লক্ষ্য = "_ নিজেই" এটি আপনার জন্য করে


9

jquery দিয়ে আপনি এটি ব্যবহার করতে পারেন:

$('#iframeid',window.parent.document).attr('src',$('#iframeid',window.parent.document).attr('src'));

এই সমাধানটি যদি আপনি বর্তমান আইফ্রেমে রিফ্রেশ করতে চান তবে আমরা যেখানে আছি। অনেক ধন্যবাদ!
ডেমোন এইচকে



3

আমি বেশ নিশ্চিত যে উপরের সমস্ত উদাহরণগুলি কেবলমাত্র ইআরএমিকে তার মূল ইউএসসি নয়, এটির বর্তমান ইউআরএল দিয়ে পুনরায় লোড করুন।

$('#frameId').attr('src', function () { return $(this).contents().get(0).location.href });

এটি বর্তমান url ব্যবহার করে পুনরায় লোড করা উচিত।


2

যদি আপনি ক্রস-ডোমেন হন তবে কেবলমাত্র একই ইউআরএলকে এসআরসি সেট করে রাখা লোকেশন হ্যাশ পরিবর্তিত হলেও সর্বদা পুনরায় লোড ট্রিগার করবে না।

ম্যানুয়ালি টুইটার বোতাম iframes তৈরি করার সময় এই সমস্যাটির মধ্যে চলে গেলেন, যা আমি ইউআরএল আপডেট করার পরে রিফ্রেশ হবে না।

বোতামের মতো টুইটারের ফর্ম রয়েছে: .../tweet_button.html#&_version=2&count=none&etc=...

যেহেতু টুইটারটি ইউআরএলটির জন্য নথির টুকরোটি ব্যবহার করে, হ্যাশ / টুকরা পরিবর্তন করে উত্সটি পুনরায় লোড হয় না এবং বোতামের লক্ষ্যগুলি আমার নতুন এজ্যাক্স-লোডযুক্ত সামগ্রীকে প্রতিফলিত করে না।

পুনরায় লোড করার জন্য আপনি কোয়েরি স্ট্রিং প্যারামিটার যুক্ত করতে পারেন (উদা: "?_=" + Math.random() তবে এটি ব্যান্ডউইথকে নষ্ট করবে, বিশেষত এই উদাহরণে যেখানে টুইটারের দৃষ্টিভঙ্গি বিশেষভাবে ক্যাশে সক্ষম করার চেষ্টা করছে trying

এমন কিছু পুনরায় লোড করতে যা কেবল হ্যাশ ট্যাগের সাহায্যে পরিবর্তিত হয়, আপনাকে উপাদানটি সরিয়ে ফেলতে হবে বা srcথ্রেডটি বেরিয়ে যাওয়ার জন্য অপেক্ষা করতে হবে, তারপরে এটি পুনরায় বরাদ্দ করুন। যদি পৃষ্ঠাটি এখনও ক্যাশে থাকে তবে এর জন্য কোনও নেটওয়ার্ক হিটের প্রয়োজন হবে না, তবে ফ্রেম পুনরায় লোড ট্রিগার করে।

 var old = iframe.src;
 iframe.src = '';
 setTimeout( function () {
    iframe.src = old;
 }, 0);

আপডেট : এই পদ্ধতির ব্যবহার অযাচিত ইতিহাসের আইটেম তৈরি করে। পরিবর্তে, প্রতিবার iframe উপাদানটি সরান এবং পুনরায় তৈরি করুন, যা প্রত্যাশা অনুযায়ী এই পিছনে () বোতামটি কাজ করে। এছাড়াও টাইমার না পেয়ে ভাল।


2

অ্যালেক্সের উত্তরটি কেবল জিকুয়েরির সাথেই রচনা করা হচ্ছে:

var e = $('#myFrame');
    e.attr("src", e.attr("src"));

অথবা আপনি ছোট ফাংশন ব্যবহার করতে পারেন:

function iframeRefresh(e) {
    var c = $(e);
        c.attr("src", c.attr("src"));
}

আমি আসা করি এটা সাহায্য করবে.



1

সহজ জাভাস্ক্রিপ্ট দিয়ে এটি সম্ভব is

  • আইফ্রেমে 1 এ, একটি জাভাস্ক্রিপ্ট ফাংশন তৈরি করুন যা বডি ট্যাগ অনলোডে ডাকা হয়। আমি এটি নির্ধারণ করেছি এমন একটি সার্ভারের পার্শ্ব ভেরিয়েবলটি পরীক্ষা করে দেখছি, তাই iframe1 এ আমি জাভাস্ক্রিপ্ট ফাংশনটি চালানোর চেষ্টা করি না যদি না আমি iframe1 এ একটি নির্দিষ্ট পদক্ষেপ না নিই। আপনি এটি বাটন প্রেস দ্বারা চালিত একটি ফাংশন হিসাবে সেট করতে পারেন তবে আপনি iframe1 এ করতে চান।
  • তারপরে iframe2 এ আপনার নীচে দ্বিতীয় ফাংশন রয়েছে list Iframe1 এ ফাংশনটি মূলত প্যারেন্ট পৃষ্ঠায় যায় এবং তারপরে window.framesiframe2 তে জাভাস্ক্রিপ্ট ফাংশন ফায়ার করতে সিনট্যাক্স ব্যবহার করে । কেবলমাত্র id/ nameএর iframe2 ব্যবহার করার বিষয়টি নিশ্চিত করুন এবং এটির নয় src
//function in iframe1
function refreshIframe2()
{
    if (<cfoutput>#didValidation#</cfoutput> == 1)
    {   
         parent.window.frames.iframe2.refreshPage();
    }
}

//function in iframe2
function refreshPage()
{   
    document.location.reload();
}

1

// পৃষ্ঠায় সমস্ত iframes রিফ্রেশ

var f_list = document.getElementsByTagName('iframe');

 for (var i = 0, f; f = f_list[i]; i++) {
                            f.src = f.src;
                        }

0
    ifrX =document.getElementById('id') //or 
    ifrX =frames['index'];

ক্রস ব্রাউজার সমাধানটি হ'ল:

    ifrX.src = ifrX.contentWindow.location

এটি বিশেষত যখন কার্যকর হয় যখন <iframe> একটি <for> এর লক্ষ্য


কেন jQuery ?! যখন সহজ
জেএস

0

মীমাংসিত! আমি আপনার সাথে শেয়ার করার জন্য কেবলমাত্র সমাধানটি (কমপক্ষে ASP.NET/IE/FF/Chrome এ) ভাগ করে নেওয়ার জন্য স্টকওভারফ্লোতে নিবন্ধন করি! ধারণাটি হ'ল একটি ডিভের অভ্যন্তরীণ এইচটিএমএল মানটিকে তার বর্তমান অভ্যন্তরীণ এইচটিএমএল মান দ্বারা প্রতিস্থাপন করা হবে।

এইচটিএমএল স্নিপেট এখানে:

<div class="content-2" id="divGranite">
<h2>Granite Purchase</h2>
<IFRAME  runat="server" id="frameGranite" src="Jobs-granite.aspx" width="820px" height="300px" frameborder="0" seamless  ></IFRAME>
</div>

এবং আমার জাভাস্ক্রিপ্ট কোড:

function refreshGranite() {           
   var iframe = document.getElementById('divGranite')
   iframe.innerHTML = iframe.innerHTML;
}

আশাকরি এটা সাহায্য করবে.


এই উত্তরে একাধিক ত্রুটি: ১.এএসপি.এনইটি উপাদান নয়, সুতরাং runat="server"প্রযোজ্য নয়; ২. সব ক্যাপ কেন IFRAME? 3. মাত্রা বৈশিষ্ট্য মানগুলির কোন ইউনিট নেই; ৪. frameborderঅবনতিহিত
র‌্যাপ্টর

0

আপনার ব্যবহার করা দরকার

[0] .src

iframe এর উত্স এবং এটির URL খুঁজে পেতে পিতামাতার একই ডোমেনে থাকা দরকার।

setInterval(refreshMe, 5000);
function refreshMe() {
    $("#currentElement")[0].src = $("#currentElement")[0].src;   
}

0

আপনি এটি এইভাবে করতে পারেন

$('.refrech-iframe').click(function(){
        $(".myiframe").attr("src", function(index, attr){ 
            return attr;
        });
    });

-5

নীচের সমাধানটি নিশ্চিত হয়ে কাজ করবে:

window.parent.location.href = window.parent.location.href;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.