আমাদের এই ধরণের সমস্যা ছিল, তবে আপনার পরিস্থিতির বিপরীতে সামান্য - আমরা অন্য ডোমেনের সাইটগুলিতে iframed সামগ্রী সরবরাহ করছিলাম, সুতরাং একই উত্স নীতিটিও একটি সমস্যা ছিল। গুগল ট্রলিংয়ের জন্য বহু ঘন্টা ব্যয় করার পরে, আমরা শেষ পর্যন্ত একটি (কিছুটা ..) কার্যকর সমাধান পেয়েছি, যা আপনি আপনার প্রয়োজনের সাথে খাপ খাইয়ে নিতে সক্ষম হতে পারেন।
একই উত্স নীতি প্রায় একটি উপায় আছে, তবে এটি উভয়ই iframed সামগ্রী এবং ফ্রেমিং পৃষ্ঠাতে পরিবর্তন প্রয়োজন, সুতরাং আপনার যদি উভয় পক্ষের পরিবর্তনের জন্য অনুরোধ করার ক্ষমতা না থাকে তবে এই পদ্ধতিটি আপনার পক্ষে খুব কার্যকর হবে না, আমি আশংকা করছি.
ব্রাউজারের কৌতুক রয়েছে যা আমাদের একই উত্স নীতি স্কার্ট করার অনুমতি দেয় - জাভাস্ক্রিপ্টটি তার নিজস্ব ডোমেনের পৃষ্ঠাগুলির সাথে বা এটির আইফ্রেডযুক্ত পৃষ্ঠাগুলির সাথে যোগাযোগ করতে পারে, তবে যে পৃষ্ঠাগুলিতে এটি ফ্রেম করা হয়েছে তা কখনও নয়, যেমন আপনার যদি থাকে:
www.foo.com/home.html, which iframes
|-> www.bar.net/framed.html, which iframes
|-> www.foo.com/helper.html
তারপরে (iframed) এবং (একই ডোমেন) home.html
সাথে যোগাযোগ করতে পারেন ।framed.html
helper.html
Communication options for each page:
+-------------------------+-----------+-------------+-------------+
| | home.html | framed.html | helper.html |
+-------------------------+-----------+-------------+-------------+
| www.foo.com/home.html | N/A | YES | YES |
| www.bar.net/framed.html | NO | N/A | YES |
| www.foo.com/helper.html | YES | YES | N/A |
+-------------------------+-----------+-------------+-------------+
framed.html
helper.html
(iframed) তে বার্তা পাঠাতে পারে তবে নয় home.html
(শিশু পিতামাতার সাথে ক্রস-ডোমেন যোগাযোগ করতে পারে না)।
কী এখানে যে helper.html
থেকে বার্তা গ্রহণ করতে পারে framed.html
, এবং এছাড়াও যোগাযোগ করতে পারেন সঙ্গে home.html
।
সুতরাং মূলত, framed.html
লোড করার পরে, এটি তার নিজস্ব উচ্চতা কার্যকর করে, বলে helper.html
, যা বার্তাটি প্রেরণ করে home.html
, যা পরে framed.html
বসে থাকা আইফ্রেমের আকার পরিবর্তন করতে পারে ।
সহজ উপায় আমরা থেকে বার্তা পাস পাওয়া framed.html
থেকে helper.html
একটি URL যুক্তি মধ্য দিয়ে ড। এটি করতে, নির্দিষ্ট framed.html
একটি আইফ্রেমে রয়েছে has src=''
তার যখন onload
আগুন, এটা তার নিজস্ব উচ্চতা মূল্যায়ণ, এবং এই সময়ে আইফ্রেম এর src সেট করেhelper.html?height=N
ফেসবুক কীভাবে এটি পরিচালনা করে তার একটি ব্যাখ্যা এখানে রয়েছে, যা উপরের আমার চেয়ে কিছুটা পরিষ্কার হতে পারে!
কোড
ইন www.foo.com/home.html
, নিম্নলিখিত জাভাস্ক্রিপ্ট কোড প্রয়োজন (এটি কোনও ডোমেইনের একটি .js ফাইল থেকে ঘটনাক্রমে লোড করা যেতে পারে ..):
<script>
// Resize iframe to full height
function resizeIframe(height)
{
// "+60" is a general rule of thumb to allow for differences in
// IE & and FF height reporting, can be adjusted as required..
document.getElementById('frame_name_here').height = parseInt(height)+60;
}
</script>
<iframe id='frame_name_here' src='http://www.bar.net/framed.html'></iframe>
ইন www.bar.net/framed.html
:
<body onload="iframeResizePipe()">
<iframe id="helpframe" src='' height='0' width='0' frameborder='0'></iframe>
<script type="text/javascript">
function iframeResizePipe()
{
// What's the page height?
var height = document.body.scrollHeight;
// Going to 'pipe' the data to the parent through the helpframe..
var pipe = document.getElementById('helpframe');
// Cachebuster a precaution here to stop browser caching interfering
pipe.src = 'http://www.foo.com/helper.html?height='+height+'&cacheb='+Math.random();
}
</script>
এর উপাদানসমূহ www.foo.com/helper.html
:
<html>
<!--
This page is on the same domain as the parent, so can
communicate with it to order the iframe window resizing
to fit the content
-->
<body onload="parentIframeResize()">
<script>
// Tell the parent iframe what height the iframe needs to be
function parentIframeResize()
{
var height = getParam('height');
// This works as our parent's parent is on our domain..
parent.parent.resizeIframe(height);
}
// Helper function, parse param from request string
function getParam( name )
{
name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
var regexS = "[\\?&]"+name+"=([^&#]*)";
var regex = new RegExp( regexS );
var results = regex.exec( window.location.href );
if( results == null )
return "";
else
return results[1];
}
</script>
</body>
</html>