জাভাস্ক্রিপ্টে কোনও আইফ্রমে শরীরের সামগ্রী কীভাবে পাবেন?


154
<iframe id="id_description_iframe" class="rte-zone" height="200" frameborder="0" title="description">
  <html>
    <head></head>
    <body class="frameBody">
      test<br/>
    </body>
  </html>
</iframe>

আমি যা পেতে চাই তা হ'ল:

test<br/>

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

উত্তর:


154

নির্ভুল জাভাস্ক্রিপ্ট দিয়ে এটি কীভাবে করবেন তা হুবহু প্রশ্ন j

তবে আমি সবসময় সলিউশনটি ব্যবহার করি যা jQuery এর উত্স কোডে পাওয়া যায়। এটি নেটিভ জাভাস্ক্রিপ্টের এক লাইন।

আমার জন্য এটি সর্বোত্তম, সহজ পঠনযোগ্য এবং এমনকি আফ্রিকার সামগ্রী প্রাপ্তির সংক্ষিপ্ততম উপায়ও আফিক

প্রথমে আপনার ইফ্রেমে নিন

var iframe = document.getElementById('id_description_iframe');

// or
var iframe = document.querySelector('#id_description_iframe');

এবং তারপরে jQuery এর সমাধানটি ব্যবহার করুন

var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;

এমনকি এটি ইন্টারনেট এক্সপ্লোরারেও কাজ করে যা বস্তুর contentWindowসম্পত্তির সময় এই কৌশলটি করে iframe। বেশিরভাগ অন্যান্য ব্রাউজারগুলি contentDocumentসম্পত্তি ব্যবহার করে এবং এই কারণেই আমরা এই সম্পত্তিটিকে এই ওআর শর্তে প্রমাণ করি। যদি সেট না করা হয় তবে চেষ্টা করুন contentWindow.document

আইফ্রেমে উপাদান নির্বাচন করুন

তারপরে আপনি সাধারণত ডম-এলিমেন্টটি নির্বাচন করতে getElementById()বা এমনকি এটি querySelectorAll()থেকে ব্যবহার করতে পারেন iframeDocument:

if (!iframeDocument) {
    throw "iframe couldn't be found in DOM.";
}

var iframeContent = iframeDocument.getElementById('frameBody');

// or
var iframeContent = iframeDocument.querySelectorAll('#frameBody');

Iframe এ কল করুন ফাংশন

কিছু গ্লোবাল ফাংশন, ভেরিয়েবল বা পুরো লাইব্রেরি (উদাহরণস্বরূপ ) কল করতে কেবলমাত্র windowউপাদানটি পান :iframejQuery

var iframeWindow = iframe.contentWindow;

// you can even call jQuery or other frameworks
// if it is loaded inside the iframe
iframeContent = iframeWindow.jQuery('#frameBody');

// or
iframeContent = iframeWindow.$('#frameBody');

// or even use any other global variable
iframeWindow.myVar = window.myVar;

// or call a global function
var myVar = iframeWindow.myFunction(param1 /*, ... */);

বিঃদ্রঃ

আপনি যদি একই-উত্স নীতিটি পর্যবেক্ষণ করেন তবে এগুলি সম্ভব ।


2
iframe এখানে অপরিজ্ঞাত, হয় আপনি সম্পূর্ণ কোড লিখতে হবে বা এটি দিয়ে jQuery লিখতে হবে না
তরুন গুপ্ত

13
অনুগ্রহ করে আমাকে ক্ষমা করুন, তবে কোডের লাইনটি jquery কোডের একটি অংশ এবং কোড ব্লকটি আমার নিজস্ব উদাহরণ কোড। বাকী সবাই যেন নিজেকে বের করে দেয়। আপনি যে জিনিসটি মিস করছেন তা হ'ল ভেরিয়েবল ইফ্রেমে। এবং আমি আপনার আইফ্রেমে কোথায় বা এর আইডি কী তা সম্ভবত জানি না।
অ্যালগরিদম

5
আপনি কি দয়া করে উত্তরের শীর্ষে একটি সতর্কতা যুক্ত করতে পারেন যে যদি আইফ্রেমে দূরবর্তী এসসিআর থাকে তবে এটি কাজ করে না? আমি যদি ভুল করে থাকি তবে আমি অন্য কোন এইচটিটিপি অনুরোধ না প্রেরণে কীভাবে আমি এখনও ইফ্রামের সামগ্রী পেতে পারি তা যদি আপনি আমাকে চিহ্নিত করতে পারেন তবে আমি প্রশংসা করব (সম্ভব নয় কারণ আইফ্রেমে সামগ্রী তৈরি করতে আমার জাভাস্ক্রিপ্টের প্রয়োজন হয় এবং একটি স্থাপনা করতে চান না) দ্বিতীয় জাভাস্ক্রিপ্ট পরিবেশ যদি এড়ানো যায়)।
জ্যাকলাইন

1
আমার এমন সতর্কতা আছে তবে আমার ব্যাখ্যা শেষে। আপনাকে একই-উত্স নীতিটি পর্যবেক্ষণ করতে হবে। এখানেই শেষ.
অ্যালগরিদম

2
উপরের কাজটি পেতে, আমাকে এটি আশেপাশে বন্ধ করে দিতে হয়েছিল এটি কারওর document.querySelector('#id_description_iframe').onload = function() {... সহায়তা করে।
ব্যবহারকারী 3442612

71

JQuery ব্যবহার করে, এটি চেষ্টা করুন:

$("#id_description_iframe").contents().find("body").html()

27
এটি কাজ করে না কারণ "ডোমেন, প্রোটোকল এবং পোর্টগুলি অবশ্যই মিলবে।" : ইউআরএল দিয়ে ফ্রেম অ্যাক্সেস করার জন্য অনিরাপদ জাভাস্ক্রিপ্টের প্রচেষ্টা
আয়নিক বিজাউ

2
উল্লিখিত হিসাবে, ডোমেনগুলি মিললে এটি কাজ করবে। এফওয়াইআই, আমি সবেমাত্র খুঁজে পেয়েছি যে $ ("# আইডি_সংশ্লিষ্ট_ফ্রেমে # আইডি_ফ_ফ্রেম_বডি") t ।।। অর্থাত $ ( "# id_description_iframe #id_of_iframe_body") বিষয়বস্তু () এটি ( "শরীর") এইচটিএমএল () উভয় কাজ করেনি
hobailey

41

এটি আমার পক্ষে পুরোপুরি কার্যকর:

document.getElementById('iframe_id').contentWindow.document.body.innerHTML;

3
এটা অদ্ভুত, কিন্তু আমার জন্য .bodyকাজ করে না। যাইহোক .getElementsByTagName('body')[0]
জেনি ও'রিলি

এটি ".বাডি" নয়, কেবল "দেহ"। বিন্দুটি সরান
অর্জুন

1
আপনি ভ্যানিলা জাভাস্ক্রিপ্টে থাকলে এই উত্তরটি হওয়া উচিত।
জোভান্নি জি

23

আফাইক, কোনও ইফরামকে সেভাবে ব্যবহার করা যায় না। আপনি এর src বৈশিষ্ট্য অন্য পৃষ্ঠায় নির্দেশ করতে হবে।

বিমানের পুরানো জাভাস্ক্রিপ্ট ব্যবহার করে কীভাবে এর শরীরের সামগ্রী পাওয়া যায় তা এখানে। এটি আইই এবং ফায়ারফক্স উভয়ের সাথেই কাজ করে।

function getFrameContents(){
   var iFrame =  document.getElementById('id_description_iframe');
   var iFrameBody;
   if ( iFrame.contentDocument ) 
   { // FF
     iFrameBody = iFrame.contentDocument.getElementsByTagName('body')[0];
   }
   else if ( iFrame.contentWindow ) 
   { // IE
     iFrameBody = iFrame.contentWindow.document.getElementsByTagName('body')[0];
   }
    alert(iFrameBody.innerHTML);
 }

1
এটি সাফারিতে (অর্থাত্ শাখা)
অ্যান্ড্রে ক্রিশ্চিয়ান প্রোডান

ক্রস ডোমেন ইস্যুতে, ক্রস-অরিজিন ফ্রেমে অ্যাক্সেস করা থেকে " someOथर.com " এর উত্স সহ একটি ফ্রেম অবরুদ্ধ করেছে ।
ল্যানিফ

10

contentজেএসের সাথে আইফ্রেমে ব্যবহার করুন :

document.getElementById('id_iframe').contentWindow.document.write('content');

5

আমি মনে করি ট্যাগগুলির অভ্যন্তরে পাঠ্যগুলি ব্রাউজারগুলির জন্য সংরক্ষিত আছে যা iframes হ্যান্ডেল করতে পারে না অর্থাৎ ..

<iframe src ="html_intro.asp" width="100%" height="300">
  <p>Your browser does not support iframes.</p>
</iframe>

আপনি iframes এইচটিএমএল উত্স সেট করতে 'src' বৈশিষ্ট্যটি ব্যবহার করেন ...

আশা করি যে সাহায্য করবে :)


3

নিম্নলিখিত কোডটি ক্রস ব্রাউজারের সাথে সামঞ্জস্যপূর্ণ। এটি আই 7, আই 8, এফএক্স 3, সাফারি এবং ক্রোমে কাজ করে, তাই ক্রস ব্রাউজার সমস্যাগুলি হ্যান্ডেল করার দরকার নেই। আই 6 তে পরীক্ষা দেয়নি।

<iframe id="iframeId" name="iframeId">...</iframe>

<script type="text/javascript">
    var iframeDoc;
    if (window.frames && window.frames.iframeId &&
        (iframeDoc = window.frames.iframeId.document)) {
        var iframeBody = iframeDoc.body;
        var ifromContent = iframeBody.innerHTML;
    }
</script>

নীচের এইচটিএমএলটি ম্যাকের ক্রোম 7 এ আমার জন্য কাজ করেছিল। আমি উইন্ডোজের ক্রোম 6 এ এই মূল পোস্টটি পরীক্ষা করেছি এবং এটি ভাল কাজ করেছে। <html> <head> </head> <body> <iframe id = "iframeId" name = "iframeId"> ... </iframe> <স্ক্রিপ্ট টাইপ = "পাঠ্য / জাভাস্ক্রিপ্ট"> var iframeDoc; যদি (উইন্ডো.ফ্রেমস && উইন্ডো.ফ্রেমস.আইফ্রেমেআইডি && উইন্ডোজ.ফ্রেমস.আইফ্রেমেআইডি.ডোকামেন্ট) {উইন্ডো.ফ্রেমস.ফ্রেমেআইডি.ডোকমেন্ট.বিডি.এন.এইচটিএমএল "" <h1> পরীক্ষা </ h1> "; s </script> </body> </html>
nekno

1
window.frames.iframeId.documentআমার জন্য অপরিজ্ঞাত (উবুন্টু 13.04, ক্রোম)
ionica Bizau

2

চালকিটি সঠিক, আপনার আইফ্রেমে থাকা পৃষ্ঠাটি নির্দিষ্ট করতে আপনাকে src বৈশিষ্ট্যটি ব্যবহার করতে হবে। আপনাকে এটি প্রদান করে এবং আইফ্রেমে নথিটি মূল দস্তাবেজের একই ডোমেনে থাকে, আপনি এটি ব্যবহার করতে পারেন:

var e = document.getElementById("id_description_iframe");
if(e != null) {
   alert(e.contentWindow.document.body.innerHTML);
}

স্পষ্টতই আপনি বিষয়বস্তুগুলিকে কেবল একটি সতর্কতার পরিবর্তে রাখার পরিবর্তে দরকারী কিছু করতে পারেন।


1

জাভাস্ক্রিপ্ট থেকে শরীরের সামগ্রী পেতে, আমি নিম্নলিখিত কোডটি চেষ্টা করেছি:

var frameObj = document.getElementById('id_description_iframe');

var frameContent = frameObj.contentWindow.document.body.innerHTML;

যেখানে "id_description_iframe" হল আপনার iframe এর আইডি। এই কোডটি আমার পক্ষে ভাল কাজ করছে।


2
দয়া করে আপনার উত্তরটি কেবলমাত্র পেস্ট কোডের পরিবর্তে প্রসঙ্গে দিন। দেখুন এখানে আরো বিস্তারিত জানার জন্য।
গেবিসজিউমিস

1
কোড-কেবলমাত্র উত্তরগুলি নিম্ন মানের হিসাবে বিবেচিত হয়: আপনার কোডটি কী করে এবং কীভাবে এটি সমস্যার সমাধান করে তা একটি ব্যাখ্যা সরবরাহ করে তা নিশ্চিত করুন। আপনি যদি আপনার পোস্টে আরও তথ্য যুক্ত করতে পারেন তবে এটি প্রশ্নকারী এবং ভবিষ্যতের পাঠকদের উভয়কেই সহায়তা করবে। সম্পূর্ণ কোড-ভিত্তিক উত্তরগুলি ব্যাখ্যা করতেও দেখুন: meta.stackexchange.com/questions/114762/…
borchvm
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.