এতে থাকা সামগ্রীর সাথে মানানসই জন্য iframe এর প্রস্থ এবং উচ্চতা সামঞ্জস্য করুন


300

আমি জন্য একটি সমাধান প্রয়োজন স্বয়ংক্রিয় সামঞ্জস্যwidth এবং heightএকটি এর iframeসবে এর বিষয়বস্তু মাপসই। বিন্দুটি হ'ল প্রস্থ এবং উচ্চতাটি iframeলোড হওয়ার পরে পরিবর্তন করা যেতে পারে । আমার ধারণা আমি যদি ইফ্রেমে থাকা শরীরের মাত্রা পরিবর্তনের সাথে মোকাবিলা করতে আমার একটি ইভেন্ট অ্যাকশন দরকার need


কৌণিক আইফ্রেম অটো-উচ্চতা: gitlab.com/reduardo7/angular-iframe-auto-height
এডুয়ার্ডো

গৃহীত উত্তর কার্যকর হয় না। স্ট্যাকওভারফ্লো.com
স্টিভেন শ

উত্তর:


268
<script type="application/javascript">

function resizeIFrameToFitContent( iFrame ) {

    iFrame.width  = iFrame.contentWindow.document.body.scrollWidth;
    iFrame.height = iFrame.contentWindow.document.body.scrollHeight;
}

window.addEventListener('DOMContentLoaded', function(e) {

    var iFrame = document.getElementById( 'iFrame1' );
    resizeIFrameToFitContent( iFrame );

    // or, to resize all iframes:
    var iframes = document.querySelectorAll("iframe");
    for( var i = 0; i < iframes.length; i++) {
        resizeIFrameToFitContent( iframes[i] );
    }
} );

</script>

<iframe src="usagelogs/default.aspx" id="iFrame1"></iframe>

8
@ স্টোনহার্ট: হ্যাঁ, এটি ক্রস ব্রাউজার। কোডটি কনটেন্ট উইন্ডো সম্পত্তির কারণে অ মানক সাপেক্ষ, যা ডিওএম স্পেসে সংজ্ঞায়িত হয়নি। ডিওমে স্পটে বিষয়বস্তু ডকুমেন্ট হিসাবে পরিচিত সম্পত্তি রয়েছে, তবে ইন্টারনেট এক্সপ্লোরার 6 (এবং 7?) এটি সমর্থন করে না। সামগ্রী উইন্ডো সম্পত্তি পরিবর্তে ব্যবহার করা যেতে পারে এবং এটি সমস্ত সাধারণ ব্রাউজারগুলিতে প্রয়োগ করা হয় (গেকো, অপেরা, ওয়েবকিট, আইই)।
রাফায়েল

30
(ডকুমেন্ট.সেটিমেন্টবিওয়াইআইডি) এর ব্যবহার কী?
অ্যালি

55
এছাড়াও ভুলবেন না এটি ক্রস ডোমেন নয়। যার কারণে এটি এক ধরণের ত্রুটি পেয়েছে : ডোমেনটি আলাদা থাকলে সম্পত্তি 'ডকুমেন্ট' অ্যাক্সেসের অনুমতি অস্বীকৃত । এখানে একটি সমাধান পাওয়া যাবে
পিয়েরে লেস্পিনে

15
শর্তসাপেক্ষ কেবলমাত্র অকেজো নয় তবে বিরল পরিস্থিতিতে এটির জন্য সমস্যা তৈরির গ্যারান্টিযুক্ত। আপনি কেন কোনও পদ্ধতি বিদ্যমান কিনা তা পরীক্ষা করে পরীক্ষা করছেন এবং তারপরে চেকের বাইরের পদ্ধতিটি ব্যবহার করছেন ??
জেএস

6
আমি মনে করি আপনি বোঝাতে চেয়েছেন DOMContentLoaded, যেহেতু DOMContentReadyকোনও জিনিস বলে মনে হচ্ছে না: developer.mozilla.org/en-US/…
ম্যাক্স হাইবার

46

ক্রস ব্রাউজার jQuery প্লাগ-ইন

ক্রস-বাউঞ্জার, ক্রস ডোমেন লাইব্রেরি যা mutationObserverআইফ্রেমটিকে সামগ্রীতে আকার রাখতে এবং postMessageআইফ্রেম এবং হোস্ট পৃষ্ঠার মধ্যে যোগাযোগ করতে ব্যবহার করে। JQuery সহ বা ছাড়া কাজ করে।


3
Iframe-resizer লাইব্রেরি সবচেয়ে শক্তিশালী সমাধান।
kwill

35

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

আমি এটির সাথে কিছুক্ষণ আটকে ছিলাম, যেহেতু আইফ্রেমের অভ্যন্তরীণ কোডটি আইফ্রেমের অভ্যন্তরে ডিওএম-এর মধ্যে সীমাবদ্ধ ছিল (এবং আইফ্রেমে সম্পাদনা করতে পারে না), এবং আইফ্রেমের বাইরে সম্পাদিত কোড আইফ্রেমের বাইরে ডিওএম (এবং পারে না) এর সাথে আটকে ছিল আইফ্রেমের অভ্যন্তর থেকে আগত একটি ইভেন্ট বেছে নেওয়া)।

সমাধানটি (সহকর্মীর সহায়তার মাধ্যমে) আবিষ্কার করে এসেছিল যে ডকুম কী ব্যবহার করবে তা jQuery বলা যেতে পারে। এই ক্ষেত্রে, প্যারেন্ট উইন্ডোর DOM।

যেমন, এর মতো কোডগুলি আপনার যা প্রয়োজন তা করে (যখন আইফ্রেমের অভ্যন্তরে চালিত হয়):

<script type="text/javascript">
    jQuery(document).ready(function () {
        jQuery("#IDofControlFiringResizeEvent").click(function () {
            var frame = $('#IDofiframeInMainWindow', window.parent.document);
            var height = jQuery("#IDofContainerInsideiFrame").height();
            frame.height(height + 15);
        });
    });
</script>

এর জন্য পুরো কোডটি কী হবে? আমি ধরে নিচ্ছি স্ক্রিপ্টটি ইফ্রমে এইচটিএমএল যায়?
অ্যান্ড্রু হুন্ড

এটি সম্পূর্ণ কোড এবং হ্যাঁ, এটি আইফ্রেমের এইচটিএমএল এর ভিতরে চলে। "উইন্ডো.প্যারেন্ট.ডোকমেন্ট" অংশটি সুনির্দিষ্ট করে যে jQuery নির্বাচনকারী পিতামাত নথির DOM ব্যবহার করা উচিত, এবং আপনি যে দস্তাবেজটিতে নেই (যা আইফ্রেমের অভ্যন্তরে রয়েছে) not
গর্নাফ

13
যদি আইফ্রেমে পিতামাতা নথি এবং দস্তাবেজ দুটি একই ডোমেন থেকে থাকে তবে এটি সুন্দরভাবে কাজ করে । যদি সেগুলি না থাকে (বা ক্রোমে, তারা যদি উভয় স্থানীয় ফাইল হয় ), তবে ব্রাউজারগুলির "একই উত্স" সুরক্ষা নীতিগুলি কিক করে এবং এটি আইফ্রেমে বিষয়বস্তুকে পিতামাতার ডকটি পরিবর্তন করতে বাধা দেয়।
user56reinstatemonica8

1
যে কেউ এই কাজের ক্রস-ডোমেন জাতীয় কিছু তৈরি করার চেষ্টা করছেন তার জন্য উইন্ডো.পস্টমেসেজ ( আইই 8 +) দেখুন এবং সচেতন হন যে আপনার হোস্ট (পিতা-মাতা) এবং উত্স (iframe এর মধ্যে) নথিতে উভয়ই কাস্টম স্ক্রিপ্টের প্রয়োজন। jQuery পোস্টমেসেজ প্লাগইন সাহায্য করতে পারে। যেহেতু আপনার হোস্ট এবং উত্সে স্ক্রিপ্ট দরকার আপনার পক্ষে, জেএসএন-পি ব্যবহার করে হোস্টটিকে এজেএক্স দ্বারা সামগ্রী লোড করা আরও সহজ হতে পারে।
user56reinstatemonica8

3
পরিবর্তে কীভাবে ইভেন্টটি স্বয়ংক্রিয়ভাবে আগুন jQuery("#IDofControlFiringResizeEvent").click(function ()লাগবে?
বেন

33

এম্বেডগুলির জন্য ওয়ান-লাইনারের সমাধান: একটি ন্যূনতম আকারের সাথে শুরু হয় এবং সামগ্রী আকারে বৃদ্ধি পায়। স্ক্রিপ্ট ট্যাগের প্রয়োজন নেই।

<iframe src="http://URL_HERE.html" onload='javascript:(function(o){o.style.height=o.contentWindow.document.body.scrollHeight+"px";}(this));' style="height:200px;width:100%;border:none;overflow:hidden;"></iframe>


রান কোড স্নিপেট সাফারি 9.1.1 এর সাথে কাজ করে না হয়তো এসও সমস্যা অন্তর্ভুক্ত রয়েছে?
এলেনসার

এটি ক্রস ডোমেন নয়। সম্ভবত সার্ভারের ফ্রেমযুক্ত পৃষ্ঠায় কিছু শিরোনাম যুক্ত করা দরকার?
ফাইনাইনস

এখানে বর্ণিত সমস্ত উত্তরগুলিকে scrollHeight/scrollWidthবডি মার্জিনগুলি অ্যাকাউন্টে নেওয়ার জন্য কিছুটা সামঞ্জস্য করা উচিত। ব্রাউজারগুলি নথির বডি অ্যালিমেন্টের জন্য ডিফল্ট নঞ্জেরো মার্জিন প্রয়োগ করে (এবং এটি ফ্রেমে লোড করা সামগ্রীতেও প্রযোজ্য)। কাজ সমাধান আমি দেখেছি এই অ্যাড করা: parseInt(window.getComputedStyle(this.contentDocument.body).margin
স্ট্যান

24

যদি iframe সামগ্রীটি একই ডোমেন থেকে হয় তবে এটি দুর্দান্ত কাজ করবে। যদিও এটি jQuery প্রয়োজন।

$('#iframe_id').load(function () {
    $(this).height($(this).contents().height());
    $(this).width($(this).contents().width());
});

এটির পরিবর্তনশীল আকার পরিবর্তনশীল করতে আপনি এটি করতে পারেন:

<script language="javaScript">
<!--
function autoResize(){
    $('#themeframe').height($('#themeframe').contents().height());
}
//-->
</script>
<iframe id="themeframe" onLoad="autoResize();" marginheight="0" frameborder="0" src="URL"></iframe>

তারপরে পৃষ্ঠায় যে iframe লোড এটি যুক্ত করে:

<script language="javaScript">
function resize()
{
    window.parent.autoResize();
}

$(window).on('resize', resize);
</script>

উত্সটি যখন অন্য কোনও ডোমেন থেকে আসে তখন কি এটি করার কোনও সহজ উপায় আছে?
ব্রুস জোহেন জেনারলাওসো

15

আপনি jQuery ব্যবহার না করতে চাইলে এখানে একটি ক্রস-ব্রাউজার সমাধান রয়েছে:

/**
 * Resizes the given iFrame width so it fits its content
 * @param e The iframe to resize
 */
function resizeIframeWidth(e){
    // Set width of iframe according to its content
    if (e.Document && e.Document.body.scrollWidth) //ie5+ syntax
        e.width = e.contentWindow.document.body.scrollWidth;
    else if (e.contentDocument && e.contentDocument.body.scrollWidth) //ns6+ & opera syntax
        e.width = e.contentDocument.body.scrollWidth + 35;
    else (e.contentDocument && e.contentDocument.body.offsetWidth) //standards compliant syntax – ie8
        e.width = e.contentDocument.body.offsetWidth + 35;
}

1
এটা অদ্ভুত. আমার জন্য এটি iframe খুব অদ্ভুত প্রস্থ গণনা। সামগ্রীর প্রস্থ 750 এবং এটি 300 হিসাবে গণনা করে You আপনার কী ধারণা আছে কেন?
রব

আমি এই কোডটি দিয়েছি (উচ্চতার বিকল্পগুলি যুক্ত করে)। যদি আমি আইফ্রেমের উচ্চতা 100% এ সেট করি তবে এটি এটিকে প্রায় 200px-এ সীমাবদ্ধ করে। যদি আমি আইফ্রেমের উচ্চতা 600px এ সেট করি তবে এটি তার সাথে আটকে আছে। @ রবার্টজগোদা আপনি কি এর সমাধান পেয়েছেন?
iaindownie

9

আমি পৃথিবীর সমস্ত কিছুর চেষ্টা করার পরে, এটি সত্যই আমার পক্ষে কাজ করে।

index.html

<style type="text/css">
html, body{
  width:100%;
  height:100%;
  overflow:hidden;
  margin:0px;   
}
</style>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
function autoResize(iframe) {
    $(iframe).height($(iframe).contents().find('html').height());
}
</script>

<iframe src="http://iframe.domain.com" width="100%" height="100%" marginheight="0" frameborder="0" border="0" scrolling="auto" onload="autoResize(this);"></iframe>

এটিতে বলা হয়েছে: আনক্যাচড টাইপআরার: HTML এইচটিএমএলফ্রেমইলেটমেন্ট.অনল্ডে (সূচক): 204) অটোআরসিজে ((সূচক): 200) এ কোনও ফাংশন নয়
মাইকেল রজারস

2
@ মিশেল রজার্স $ এর সাথে বিরোধ রয়েছে বা আপনি jQuery.js ফাইলটি অন্তর্ভুক্ত করতে ভুলে গেছেন। জেনেরিক ফাংশন স্ট্যাকওভারফ্লো.com / জিজ্ঞাসা / 6109847 /… ব্যবহার করুন বা jQuery এর সাথে $ প্রতিস্থাপন করুন
অ্যাড্রিয়ান পি।

8

পৃষ্ঠায় লোড হওয়ার পরে আমি সমস্ত আইফ্রেমে উচ্চতা (বর্গ অটোহাইট সহ) উচ্চতা স্বয়ংক্রিয় করতে এই কোডটি ব্যবহার করছি। পরীক্ষিত এবং এটি আইই, এফএফ, ক্রোম, সাফারি এবং অপেরাতে কাজ করে।

function doIframe() {
    var $iframes = $("iframe.autoHeight"); 
    $iframes.each(function() {
        var iframe = this;
        $(iframe).load(function() {
            setHeight(iframe);
        });
    });
}

function setHeight(e) {
  e.height = e.contentWindow.document.body.scrollHeight + 35;
}

$(window).load(function() {
    doIframe();
});

2
আপনি কি যোগ করছেন এই যাদু 35? আপনি কোন ব্রাউজার এবং ওএসের জন্য এটি পরিমাপ করেছেন?
h2stein

আমি কেন 35 পিক্সেল যুক্ত করেছি তা সত্যিই আমি জানি না। তবে আমি অবশ্যই আপনাকে বলতে পারি যে আমি এফএফ, আইই (7, 8, 9) এবং ক্রোমে এটি পরীক্ষা করেছি এবং আমি ঠিক কাজ করেছি।
পেট্রিক

3
আমার মনে হয় 35 কেবলমাত্র স্ক্রোল-বার বেধ
সাদেঘ

এটি কাজ করতে আমাকে কিছুটা টুইট করতে হয়েছিল - সেটহাইট (আইফ্রেমে) বলা হয়; সরাসরি (মুছে $ (আইফ্রেম) .load () এটি প্রায় মোড়কের।
shacker

35 পিক্সেল যুক্ত ম্যাজিকটি iframe প্যাডিং অ্যাকাউন্টে নেওয়া হবে। আমি যুক্ত করব যে যদি আইফ্রেমে কোনও আইড্রেড থাকে না তবে এটি যত্ন নিতে হবে ra
ফিলিপ মেলো

5

এটি একটি কঠিন প্রমাণ সমাধান

function resizer(id)
{

var doc=document.getElementById(id).contentWindow.document;
var body_ = doc.body, html_ = doc.documentElement;

var height = Math.max( body_.scrollHeight, body_.offsetHeight, html_.clientHeight, html_.scrollHeight, html_.offsetHeight );
var width  = Math.max( body_.scrollWidth, body_.offsetWidth, html_.clientWidth, html_.scrollWidth, html_.offsetWidth );

document.getElementById(id).style.height=height;
document.getElementById(id).style.width=width;

}

এইচটিএমএল

<IFRAME SRC="blah.php" id="iframe1"  onLoad="resizer('iframe1');"></iframe>

3

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

আমি সবেমাত্র নেস্টেড ক্লিক () ফাংশনটি সরিয়ে আমার আইফ্রেমে এইচটিএমএল এ রেখেছি:

<script type="text/javascript">
    jQuery(document).ready(function () {
        var frame = $('#IDofiframeInMainWindow', window.parent.document);
        var height = jQuery("#IDofContainerInsideiFrame").height();
        frame.height(height + 15);
    });
</script>

আমার জন্য কাজ করেছেন, তবে ক্রস ব্রাউজার কার্যকারিতা সম্পর্কে নিশ্চিত নন।


3

আপনি যদি উভয়ই আইফ্রেমে সামগ্রী এবং প্যারেন্ট উইন্ডো নিয়ন্ত্রণ করতে পারেন তবে আপনার আইফ্রেম রেজাইজার দরকার ।

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

  • সামগ্রীর আকারে আইফ্রেমের উচ্চতা এবং প্রস্থের আকার পরিবর্তন করা।
  • একাধিক এবং নেস্টেড আইফ্রেমগুলির সাথে কাজ করে।
  • ক্রস ডোমেন আইফ্রেমগুলির জন্য ডোমেন প্রমাণীকরণ।
  • জটিল সিএসএস লেআউটগুলি সমর্থন করতে পৃষ্ঠা আকারের গণনা পদ্ধতিগুলির একটি পরিসীমা সরবরাহ করে।
  • ডিওমে পরিবর্তনগুলি সনাক্ত করে যা মিউটেশনঅবার্সার ব্যবহার করে পৃষ্ঠাটিকে পুনরায় আকার দিতে পারে।
  • পৃষ্ঠাগুলি পুনরায় আকার দেওয়ার (উইন্ডো পুনরায় আকার, সিএসএস অ্যানিমেশন এবং ট্রানজিশন, ওরিয়েন্টেশন পরিবর্তন এবং মাউস ইভেন্ট) তৈরি করতে পারে এমন ইভেন্টগুলি সনাক্ত করে।
  • পোস্টম্যাসেজের মাধ্যমে আইফ্রেম এবং হোস্ট পৃষ্ঠার মধ্যে সরলীকৃত বার্তা।
  • আইফ্রেমে পৃষ্ঠাগুলির লিঙ্কগুলিতে সংশোধন করা এবং আইফ্রেম এবং পিতামাতার পৃষ্ঠার লিঙ্কগুলিকে সমর্থন করে।
  • কাস্টম আকার এবং স্ক্রোলিং পদ্ধতি সরবরাহ করে।
  • আইফ্রেমে প্যারেন্ট অবস্থান এবং ভিউপোর্টের আকারটি প্রকাশ করে।
  • পিডিএফ এবং ওডিএফ ডকুমেন্টগুলির সমর্থন করতে ভিউয়ারজেএসের সাথে কাজ করে।
  • ফলব্যাক আইই 8-তে সমর্থন।

2

উপরের পদ্ধতিগুলি ব্যবহার করে সবাই কাজ করতে পারে না।

জাভাস্ক্রিপ্ট:

function resizer(id) {
        var doc = document.getElementById(id).contentWindow.document;
        var body_ = doc.body, html_ = doc.documentElement;

        var height = Math.max(body_.scrollHeight, body_.offsetHeight, html_.clientHeight, html_.scrollHeight, html_.offsetHeight);
        var width = Math.max(body_.scrollWidth, body_.offsetWidth, html_.clientWidth, html_.scrollWidth, html_.offsetWidth);

        document.getElementById(id).style.height = height;
        document.getElementById(id).style.width = width;

    }

এইচটিএমএল:

<div style="background-color:#b6ff00;min-height:768px;line-height:inherit;height:inherit;margin:0px;padding:0px;overflow:visible" id="mainDiv"  >
         <input id="txtHeight"/>height     <input id="txtWidth"/>width     
        <iframe src="head.html" name="topFrame" scrolling="No" noresize="noresize" id="topFrame" title="topFrame" style="width:100%; height: 47px" frameborder="0"  ></iframe>
        <iframe src="left.aspx" name="leftFrame" scrolling="yes"   id="Iframe1" title="leftFrame" onload="resizer('Iframe1');" style="top:0px;left:0px;right:0px;bottom:0px;width: 30%; border:none;border-spacing:0px; justify-content:space-around;" ></iframe>
        <iframe src="index.aspx" name="mainFrame" id="Iframe2" title="mainFrame" scrolling="yes" marginheight="0" frameborder="0" style="width: 65%; height:100%; overflow:visible;overflow-x:visible;overflow-y:visible; "  onload="resizer('Iframe2');" ></iframe>
</div>

এনভ: আইই 10, উইন্ডোজ 7 এক্স 64


2

কিছু পরীক্ষা-নিরীক্ষার পরে আমি আরও একটি সমাধান বের করেছিলাম। আমি মূলত এই প্রশ্নের 'সেরা উত্তর' হিসাবে চিহ্নিত কোডটি চেষ্টা করেছি এবং এটি কার্যকর হয়নি। আমার অনুমান কারণ কারণটি ছিল তখন আমার প্রোগ্রামটিতে আমার iframe গতিশীলভাবে উত্পন্ন হয়েছিল। আমি যে কোডটি ব্যবহার করেছি এটি এখানে (এটি আমার জন্য কাজ করেছিল):

জাভাস্ক্রিপ্টটি iframe এর মধ্যে লোড হচ্ছে:

window.onload = function()
    {
        parent.document.getElementById('fileUploadIframe').style.height = document.body.clientHeight+5+'px';
        parent.document.getElementById('fileUploadIframe').style.width = document.body.clientWidth+18+'px';
    };

স্ক্রোল বারগুলি সরানোর জন্য উচ্চতায় 4 বা ততোধিক পিক্সেল যুক্ত করা প্রয়োজন (কিছু অদ্ভুত বাগ / আইফ্রেমের প্রভাব)। প্রস্থটি এমনকি অপরিচিত, আপনি শরীরের প্রস্থে 18px যুক্ত করা নিরাপদ। এছাড়াও নিশ্চিত হয়ে নিন যে আপনার কাছে আইফ্রেমে বডি প্রয়োগ হয়েছে (নীচে) for

html, body {
   margin:0;
   padding:0;
   display:table;
}

iframe {
   border:0;
   padding:0;
   margin:0;
}

এখানে iframe এর জন্য এইচটিএমএল:

<iframe id="fileUploadIframe" src="php/upload/singleUpload.html"></iframe>

আমার iframe এর মধ্যে সমস্ত কোড এখানে রয়েছে:

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>File Upload</title>
    <style type="text/css">
    html, body {
        margin:0;
        padding:0;
        display:table;
    }
    </style>
    <script type="text/javascript">
    window.onload = function()
    {
        parent.document.getElementById('fileUploadIframe').style.height = document.body.clientHeight+5+'px';
        parent.document.getElementById('fileUploadIframe').style.width = document.body.clientWidth+18+'px';
    };
    </script>
</head>
<body>
    This is a test.<br>
    testing
</body>
</html>

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


ধন্যবাদ আমি মোবাইল ব্রাউজারগুলিতে যা যা পরীক্ষা করেছিলাম তা থেকে আশ্চর্যজনকভাবে কাজ করে এবং সেখানেই যদি আইফ্রেমগুলি পুনরায় আকার দেওয়ার ক্ষেত্রে আমার সমস্যা ছিল!
মিরেসিয়া স্যান্ডু

আপনি এটি পছন্দ করেছেন :-) আমি বেশিরভাগ অংশে আরও দক্ষ এবং এজাক্সের চেয়ে আরও ভাল ব্রাউজার সমর্থন অফার করার জন্য iframe পেয়েছি।
www139

1
ধন্যবাদ!!! প্রধানত, কারণ আপনি একমাত্র ব্যক্তি যিনি নির্দিষ্টভাবে লোককে না ধরে রেখে কোডটি নির্দিষ্ট করে রেখেছিলেন specified এই সহজ সমাধানটি আমার (ফায়ারফক্স, ক্রোম, এজ) জন্য আমার ওয়ার্ডপ্রেস সাইটে একই ডোমেনে গতিশীল সামগ্রী তৈরির জন্য পুরোপুরি কাজ করেছিল। আমার একটি ফর্ম নির্বাচন রয়েছে যা বিভিন্ন দৈর্ঘ্যের গতিশীল কন্টেন্ট আউটপুট দেবে। আইফ্রেমটি সুন্দরভাবে সামঞ্জস্য করে। আমাকে .clientHeight + 5 + 'px' টুইঙ্ক করতে হয়েছিল; এবং ক্লায়েন্টউইথ + 18 + 'পিক্স'; আরও পিক্সেল হতে। এবং আমি নিশ্চিত না কেন প্রদর্শন: টেবিল; সিএসএসে প্রয়োজন ছিল তাই আমি এটি আমার উদ্দেশ্যে মন্তব্য করেছিলাম। আবার ধন্যবাদ.
Heres2u

1

এইভাবেই আমি এটি করব (এফএফ / ক্রোমে পরীক্ষিত):

<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
function autoResize(iframe) {
    $(iframe).height($(iframe).contents().find('html').height());
}
</script>

<iframe src="page.html" width="100%" height="100" marginheight="0" frameborder="0" onload="autoResize(this);"></iframe>

মাইক্রোসফ্ট যদি সেদিকে খেয়াল না করে তবে কার যত্ন করা উচিত?
এম

1

এখানে বেশ কয়েকটি পদ্ধতি রয়েছে:

<body style="margin:0px;padding:0px;overflow:hidden">
    <iframe src="http://www.example.com" frameborder="0" style="overflow:hidden;height:100%;width:100%" height="100%" width="100%"></iframe>
</body>

এবং অন্য যে কোনও বিকল্প

<body style="margin:0px;padding:0px;overflow:hidden">
    <iframe src="http://www.example.com" frameborder="0" style="overflow:hidden;overflow-x:hidden;overflow-y:hidden;height:100%;width:100%;position:absolute;top:0px;left:0px;right:0px;bottom:0px" height="100%" width="100%"></iframe>
</body>

উপরে দেখানো হিসাবে 2 বিকল্পগুলির সাথে স্ক্রোলিং লুকানোর জন্য

<body style="margin:0px;padding:0px;overflow:hidden">
    <iframe src="http://www.example.com" frameborder="0" style="overflow:hidden;height:150%;width:150%" height="150%" width="150%"></iframe>
</body>

দ্বিতীয় কোড সহ হ্যাক

<body style="margin:0px;padding:0px;overflow:hidden">
    <iframe src="http://www.example.com" frameborder="0" style="overflow:hidden;overflow-x:hidden;overflow-y:hidden;height:150%;width:150%;position:absolute;top:0px;left:0px;right:0px;bottom:0px" height="150%" width="150%"></iframe>
</body>

আইফ্রেমের স্ক্রোল-বারগুলি আড়াল করার জন্য, স্ক্রোলবারগুলি আড়াল করতে পিতামাতাকে "ওভারফ্লো: লুকানো" তৈরি করা হয় এবং আইফ্রেমে 150% প্রস্থ এবং উচ্চতা পর্যন্ত যেতে হয় যা পৃষ্ঠার বাইরের স্ক্রোল বারগুলিকে বাধ্য করে এবং যেহেতু দেহ না করে ' টিতে স্ক্রোল-বার রয়েছে এমন কেউ আশা করতে পারে না যে iframe পৃষ্ঠার সীমা অতিক্রম করবে। এটি পুরো প্রস্থ সহ আইফ্রেমের স্ক্রোলবারগুলি গোপন করে!

উত্স: সেট iframe অটো উচ্চতা


আপনি যে উদাহরণগুলি দিয়েছেন তা হ'ল iframe সম্পূর্ণ সামগ্রী তৈরি করবে, সমস্ত অভ্যন্তরীণ সামগ্রীতে ফিট করার জন্য iframe এর উচ্চতাটি অটোরেসাইজ করা নয়। এটি প্রশ্নের উত্তর দেয় না।
নিকর্নোটো

1

যদি কেউ এখানে পৌঁছে যায়: আমি যখন আইফ্রেমে থেকে ডিভগুলি সরিয়েছি তখন আমার সমাধানগুলির সাথে সমস্যা ছিল - যদি আইফ্রেমটি সংক্ষিপ্ত হয়নি।

কাজ করার জন্য একটি জ্যাকুয়ারি প্লাগইন রয়েছে:

http://www.jqueryscript.net/layout/jQuery-Plugin-For-Auto-Resizing-iFrame-iFrame-Resizer.html


1

আমি এই রেজাইজারটি আরও ভালভাবে কাজ করতে পেলাম:

function resizer(id)
{

    var doc = document.getElementById(id).contentWindow.document;
    var body_ = doc.body;
    var html_ = doc.documentElement;

    var height = Math.max( body_.scrollHeight, body_.offsetHeight, html_.clientHeight,     html_.scrollHeight, html_.offsetHeight );
    var width  = Math.max( body_.scrollWidth, body_.offsetWidth, html_.clientWidth, html_.scrollWidth, html_.offsetWidth );

    document.getElementById(id).height = height;
    document.getElementById(id).width = width;

}

স্টাইল অবজেক্টটি মুছে ফেলা হয়েছে তা নোট করুন।


ক্রোম / উইন 10 এ আমার জন্য কাজ করে না - সামগ্রীটি নীচে আংশিকভাবে কাটা হয়।
গ্লেনারু

1

JQuery এ, এটি আমার কাছে সেরা বিকল্প, এটি আমাকে সত্যিই সহায়তা করে !! আমি অপেক্ষা করি যে আপনাকে সাহায্য!

আইফ্রেম

<iframe src="" frameborder="0" id="iframe" width="100%"></iframe>

jQuery এর

<script>            
        var valueSize = $( "#iframe" ).offset();
        var totalsize = (valueSize.top * 2) + valueSize.left;

        $( "#iframe" ).height(totalsize);            

</script>

1

প্রসঙ্গ

ওয়েব-এক্সটেনশনের প্রসঙ্গে আমাকে নিজেই এটি করতে হয়েছিল। এই ওয়েব-এক্সটেনশানটি প্রতিটি পৃষ্ঠায় UI এর কিছু টুকরো ইনজেকশন দেয় এবং এই UI এর ভিতরে থাকে iframeiframeগতির অভ্যন্তরের সামগ্রীটি গতিশীল, তাই আমাকে নিজের প্রস্থ এবং উচ্চতাটি আবার সমন্বয় করতে iframeহয়েছিল।

আমি ব্যবহার করি প্রতিক্রিয়া তবে ধারণাটি প্রতিটি লাইব্রেরিতে প্রযোজ্য।

আমার সমাধান (এটি অনুমান করে যে আপনি পৃষ্ঠা এবং iframe উভয়ই নিয়ন্ত্রণ করেন)

iframeআমি ভিতরে bodyস্টাইল পরিবর্তন করে সত্যই বড় মাত্রা আছে। এটি সমস্ত প্রয়োজনীয় স্থান ব্যবহার করে অভ্যন্তরের উপাদানগুলিকে বাইরে রাখার অনুমতি দেবে। মেকিং widthএবং height১০০% আমার পক্ষে কাজ করেনি (আমার ধারণা, যদি আইফ্রেমে একটি ডিফল্ট থাকে width = 300pxএবং height = 150px)

/* something like this */
body {
  width: 99999px;
  height: 99999px;
}

তারপরে আমি একটি ডিভের মধ্যে সমস্ত আইফ্রেমে ইউআই ইনজেকশন দিয়েছিলাম এবং এটিকে কিছু স্টাইল দিয়েছি

#ui-root {
  display: 'inline-block';     
}

আমার অ্যাপ্লিকেশনটিকে এর অভ্যন্তরে রেন্ডার করার পরে #ui-root( প্রতিক্রিয়াতে আমি এটি ভিতরে করি componentDidMount) আমি এই ডিভের মাত্রাগুলি পছন্দ করি এবং এটি ব্যবহার করে প্যারেন্ট পৃষ্ঠায় সিঙ্ক করে থাকি window.postMessage:

let elRect = el.getBoundingClientRect()
window.parent.postMessage({
  type: 'resize-iframe',
  payload: {
    width: elRect.width,
    height: elRect.height
  }
}, '*')

প্যারেন্ট ফ্রেমে আমি এই জাতীয় কিছু করি:

window.addEventListener('message', (ev) => {
  if(ev.data.type && ev.data.type === 'resize-iframe') {
    iframe.style.width = ev.data.payload.width + 'px'
    iframe.style.height = ev.data.payload.height + 'px'
  }
}, false)

চমৎকার সমাধান! ধন্যবাদ!
পুনর্নির্ধারণ

0

এমন একটি "ভূতের মতো" আইফ্রেম তৈরি করা সম্ভব যা এটির মতো কাজ করে না।

Http://codecopy.wordpress.com/2013/02/22/ghost-iframe-crossdomain-iframe-resize/ দেখুন

মূলত আপনি parent.postMessage(..)বর্ণিত ইভেন্ট সিস্টেমটি ব্যবহার করুন https://developer.mozilla.org/en-US/docs/DOM/window.postMessage এ

এটি একটি সমস্ত আধুনিক ব্রাউজারে কাজ করে!


0

আমি জানি পোস্টটি পুরানো, তবে আমি বিশ্বাস করি এটি এটি করার আরও একটি উপায়। আমি সবেমাত্র আমার কোডটিতে প্রয়োগ করেছি। পৃষ্ঠা লোড এবং পৃষ্ঠা আকারে উভয়ই পুরোপুরি কাজ করে:

var videoHeight;
var videoWidth;
var iframeHeight;
var iframeWidth;

function resizeIframe(){
    videoHeight = $('.video-container').height();//iframe parent div's height
    videoWidth = $('.video-container').width();//iframe parent div's width

    iframeHeight = $('.youtubeFrames').height(videoHeight);//iframe's height
    iframeWidth = $('.youtubeFrames').width(videoWidth);//iframe's width
}
resizeIframe();


$(window).on('resize', function(){
    resizeIframe();
});

0

শিরোনামে জাভাস্ক্রিপ্ট স্থাপন করা হবে:

function resizeIframe(obj) {
        obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px';
      }

এখানে iframe এইচটিএমএল কোড যায়:

<iframe class="spec_iframe" seamless="seamless" frameborder="0" scrolling="no" id="iframe" onload="javascript:resizeIframe(this);" src="somepage.php" style="height: 1726px;"></iframe>

CSS স্টাইলশিট et

>

.spec_iframe {
        width: 100%;
        overflow: hidden;
    }

0

কৌণিক সংক্রান্ত নির্দেশাবলী বিশিষ্টতার জন্য:

G.directive ( 'previewIframe', function () {
return {
    restrict : 'A',
    replace : true,
    scope : true,
    link : function ( scope, elem, attrs ) {
        elem.on ( 'load', function ( e ) {
            var currentH = this.contentWindow.document.body.scrollHeight;
            this.style.height = eval( currentH ) + ( (25 / 100)* eval( currentH ) ) + 'px';
        } );
    }
};
} );

শতাংশটি লক্ষ করুন, আমি এটি inোকিয়েছি যাতে আপনি সাধারণত iframe, পাঠ্য, বিজ্ঞাপন ইত্যাদির জন্য করা স্কেলিংয়ের বিরুদ্ধে লড়াই করতে পারেন, যদি কোনও স্কেলিং বাস্তবায়ন না হয় তবে কেবল 0 লিখুন


0

এইভাবে আমি এটি লোড করেছিলাম বা যখন বিষয়গুলি পরিবর্তন হয়।

parent.jQuery("#frame").height(document.body.scrollHeight+50);

0

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

var parentContainer = parent.document.querySelector("iframe[src*=\"" + window.location.pathname + "\"]");
parentContainer.style.height = document.body.scrollHeight + 50 + 'px';

এটি প্যারেন্ট পাত্রে 'সন্ধান করে' এবং তারপরে স্ক্রোল বারটি সরাতে 50 পিক্সেলের একটি ফজ ফ্যাক্টরের সাথে যুক্ত দৈর্ঘ্য সেট করে।

ডকুমেন্টের উচ্চতা পরিবর্তনের 'পর্যবেক্ষণ' করার কিছুই নেই, এটি আমার ব্যবহারের ক্ষেত্রে প্রয়োজন হয়নি। আমার উত্তরে আমি পিতামাতাকে / আইফ্রেমে কন্টেন্টে বেকড আইডি ব্যবহার না করে প্যারেন্ট পাত্রে রেফারেন্সের একটি উপায় আনতে পারি।


0

আপনি যদি একটি নির্দিষ্ট দিক অনুপাতের সাথে বাঁচতে পারেন এবং আপনি যদি একটি প্রতিক্রিয়াশীল iframe চান তবে এই কোডটি আপনার পক্ষে কার্যকর হবে। এটি কেবল সিএসএসের নিয়ম।

.iframe-container {
  overflow: hidden;
  /* Calculated from the aspect ration of the content (in case of 16:9 it is 9/16= 
  0.5625) */
  padding-top: 56.25%;
  position: relative;
}
.iframe-container iframe {
  border: 0;
  height: 100%;
  left: 0;
  position: absolute;
  top: 0;
  width: 100%;
}

আইফ্রেমে অবশ্যই ধারক হিসাবে একটি ডিভ থাকতে হবে।

<div class="iframe-container">
   <iframe src="http://example.org"></iframe>
</div>

উত্স কোডটি এই সাইটের উপর ভিত্তি করে এবং বেন মার্শালের একটি ভাল ব্যাখ্যা রয়েছে।


-1

সরলতা:

var iframe = $("#myframe");
$(iframe.get(0).contentWindow).on("resize", function(){
    iframe.width(iframe.get(0).contentWindow.document.body.scrollWidth);
    iframe.height(iframe.get(0).contentWindow.document.body.scrollHeight);
});

-1

বিষয়বস্তুটি যদি খুব সাধারণ এইচটিএমএল হয় তবে জাভাস্ক্রিপ্ট সহ iframe অপসারণ করা সহজ উপায়

এইচটিএমএল কোড:

<div class="iframe">
    <iframe src="./mypage.html" frameborder="0" onload="removeIframe(this);"></iframe>
</div>

জাভাস্ক্রিপ্ট কোড:

function removeIframe(obj) {
    var iframeDocument = obj.contentDocument || obj.contentWindow.document;
    var mycontent = iframeDocument.getElementsByTagName("body")[0].innerHTML;
    obj.remove();
    document.getElementsByClassName("iframe")[0].innerHTML = mycontent;
}

1
এটি পিতামাতার নথির রূপরেখা পরিবর্তন করে। যদি আপনি কোনও ফিগক্যাপশন সহ কোনও চিত্র হিসাবে অন্য কোনও দস্তাবেজ রাখতে চান তবে এটি নথিকে ন্যূনতম রূপরেখায় রাখে না। বিভিন্ন ব্যবহারের ক্ষেত্রে, তবে আমি একটি কোড স্নিপেটকে আইফ্রেমে সরানোতে চেয়েছিলাম বাহ্যরেখার কারণে।
হেনরির বিড়াল

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