javascript - পিতামাতার পৃষ্ঠা থেকে একটি আইফ্রেমে জাভাস্ক্রিপ্ট কোড আমন্ত্রণ




9 Answers

আপনার আইফ্রেমের আইডি "targetframe" এবং আপনি যে ফাংশনটি কল করতে চান তা লক্ষ্য করুন ফাংশন targetFunction() :

document.getElementById('targetFrame').contentWindow.targetFunction();

আপনি window.frames পরিবর্তে window.frames ব্যবহার করে ফ্রেমে অ্যাক্সেস করতে পারেন।

// this option does not work in most of latest versions of chrome and Firefox
window.frames[0].frameElement.contentWindow.targetFunction(); 

মূলত, আমার একটি iframe একটি পৃষ্ঠাতে এমবেড আছে এবং iframe কিছু JavaScript রুটিন থাকে যা আমাকে প্যারেন্ট পৃষ্ঠা থেকে আহ্বান করতে হবে।

এখন বিপরীতটি বেশ সহজ, কারণ আপনাকে কেবল parent.functionName() কল করতে হবে, তবে দুর্ভাগ্যবশত, আমার ঠিক বিপরীত প্রয়োজন।

অনুগ্রহ করে মনে রাখবেন যে আমার সমস্যা iframe উত্স URL পরিবর্তন করছে না, তবে iframe সংজ্ঞায়িত একটি ফাংশনকে আহ্বান iframe




iframe কাছ থেকে একটি পিতামাতা JS ফাংশন কল করা সম্ভব, তবে iframe লোড হওয়া পিতা-মাতা এবং পৃষ্ঠা উভয়ই একই ডোমেন থেকে থাকে, যেমন abc.com, এবং উভয় একই প্রোটোকল ব্যবহার করছে, উভয়ই হয় http:// বা https://

কল নীচের উল্লিখিত ক্ষেত্রে ব্যর্থ হবে:

  1. মূল পৃষ্ঠা এবং আইফ্রেম পৃষ্ঠা বিভিন্ন ডোমেইন থেকে হয়।
  2. তারা বিভিন্ন প্রোটোকল ব্যবহার করছে, http: // এবং অন্যটি https: // এ রয়েছে।

এই সীমাবদ্ধতার যে কোনও কার্যকারিতা অত্যন্ত অনিরাপদ হবে।

উদাহরণস্বরূপ, কল্পনা করুন আমি superwinningcontest.com ডোমেইন নিবন্ধিত করেছি এবং লোকেদের ইমেলের লিঙ্ক পাঠিয়েছি। যখন তারা প্রধান পৃষ্ঠাটি লোড করে তখন আমি সেখানে কয়েকটি iframe গুলি লুকাতে পারি এবং তাদের ফেসবুক ফিড পড়তে, সাম্প্রতিক আমাজন বা পেপ্যাল ​​লেনদেনগুলি চেক করতে পারি, অথবা - যদি তারা কোনও পরিষেবা ব্যবহার করে যা যথেষ্ট নিরাপত্তা প্রয়োগ না করে - অর্থ স্থানান্তর করে তাদের অ্যাকাউন্ট। জাভাস্ক্রিপ্ট একই ডোমেইন এবং একই-প্রোটোকল সীমাবদ্ধ।




যদি আইফ্রেম এবং ধারণকারী নথিটি একটি ভিন্ন ডোমেনে থাকে তবে পূর্বে পোস্ট করা পদ্ধতিগুলি কাজ করবে না, তবে একটি সমাধান রয়েছে:

উদাহরণস্বরূপ, যদি ডকুমেন্ট এটিতে একটি আইফ্রেম উপাদান থাকে যা দস্তাবেজ B থাকে এবং নথিতে স্ক্রিপ্ট A নথির B বিন্দুতে বস্তুর পোস্ট মেসেজ () কল করে, তবে সেই বস্তুর একটি বার্তা ইভেন্ট বহিস্কার করা হবে, যা উইন্ডোটির উত্স থেকে উদ্ভূত ডকুমেন্ট এ। নথিতে স্ক্রিপ্টটি এটির মতো দেখতে পারে:

var o = document.getElementsByTagName('iframe')[0];
o.contentWindow.postMessage('Hello world', 'http://b.example.org/');

ইনকামিং ইভেন্টগুলির জন্য ইভেন্ট হ্যান্ডলার নিবন্ধন করতে, স্ক্রিপ্ট addEventListener () (বা অনুরূপ প্রক্রিয়াগুলি) ব্যবহার করবে। উদাহরণস্বরূপ, নথিতে B স্ক্রিপ্টটি দেখতে পারা যায়:

window.addEventListener('message', receiver, false);
function receiver(e) {
  if (e.origin == 'http://example.com') {
    if (e.data == 'Hello world') {
      e.source.postMessage('Hello', e.origin);
    } else {
      alert(e.data);
    }
  }
}

এই স্ক্রিপ্টটি প্রথমে ডোমেনটিকে প্রত্যাশিত ডোমেনটি পরীক্ষা করে দেখায় এবং তারপরে বার্তাটি দেখায় যা এটি ব্যবহারকারীর কাছে প্রদর্শন করে, বা প্রথম বারে বার্তা প্রেরণকারী নথিতে একটি বার্তা পাঠিয়ে প্রতিক্রিয়া জানায়।

http://dev.w3.org/html5/postmsg/#web-messaging মাধ্যমে




IFRAME frames[] সংগ্রহ করা উচিত। ভালো কিছু ব্যবহার করুন

frames['iframeid'].method();



আমি বেশ একটি মার্জিত সমাধান পাওয়া যায় নি।

যেমন আপনি বলেছেন, মূল নথিতে অবস্থিত কোডটি চালানো মোটামুটি সহজ। এবং যে আমার কোড বেস, বিপরীত না।

যখন আমার আইফ্রেম লোড হয়, আমি আইফ্রেমের নথিতে অবস্থিত একটি স্থানীয় ফাংশনের একটি রেফারেন্স হিসাবে একটি যুক্তি হিসাবে প্রেরণ করে, অভিভাবক নথিতে অবস্থিত একটি ফাংশন কল করি। পিতামাতার ডকুমেন্টের এখন এই রেফারেন্সের মাধ্যমে আইফ্রেমের ফাংশনে সরাসরি অ্যাক্সেস রয়েছে।

উদাহরণ:

পিতামাতার উপর:

function tunnel(fn) {
    fn();
}

আইফ্রেমে:

var myFunction = function() {
    alert("This work!");
}

parent.tunnel(myFunction);

আইফ্রেম লোড হলে, এটি parent.tunnel (YourFunctionReference) কল করবে, যা প্যারামিটারে প্রাপ্ত ফাংশনটি কার্যকর করবে।

যে সহজ, বিভিন্ন ব্রাউজার থেকে সব অ-মানক পদ্ধতি মোকাবেলা ছাড়া।




উত্তর দিয়ে :

আরো শক্তির জন্য, নিম্নরূপ ব্যবহার করুন:

var el = document.getElementById('targetFrame');

if(el.contentWindow)
{
   el.contentWindow.targetFunction();
}
else if(el.contentDocument)
{
   el.contentDocument.targetFunction();
}

কবজ মত কাজ :)




       $("#myframe").load(function() {
            alert("loaded");
        });



আমরা কোডিং থেকে উত্পন্ন আইফ্রেম থেকে প্যারেন্ট পৃষ্ঠা জাভাস্ক্রিপ্ট ফাংশন কল করতে চান তাহলে। প্রাক shadowbox বা লাইটবক্স

window.parent.targetFunction ();




পিতামাতার পৃষ্ঠায় একটি ফ্রেমের ফাংশন কল করতে নিম্নলিখিত ব্যবহার করুন

parent.document.getElementById('frameid').contentWindow.somefunction()



Related