আইএফআরএম থেকে বর্তমান ইউআরএল পান


91

কোনও আইফ্রেমে বর্তমান ইউআরএল পাওয়ার সহজ উপায় কি আছে?

দর্শক একাধিক সাইটের মধ্য দিয়ে যাচ্ছিল। আমি অনুমান করছি যে আমি জাভাস্ক্রিপ্টে কিছু ব্যবহার করব।


4
আপনি এখানে এসেছে আইফ্রেম এর "পিতা বা মাতা" পৃষ্ঠার URL খুঁজছেন, দেখতে stackoverflow.com/q/3420004/32453
rogerdpack

উত্তর:


166

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

document.getElementById("iframe_id").contentWindow.location.href

যদি দুটি ডোমেন মিলে যায় না তবে আপনি ক্রস সাইট রেফারেন্স স্ক্রিপ্টিং সুরক্ষা সীমাবদ্ধতায় চলে যাবেন।

অনুরূপ প্রশ্নের উত্তরও দেখুন ।


আপনি কি জানেন যে বিজয়ী উত্তর প্রদত্ত সমাধান কাজ করে? আমি এটি আমার কম্পিউটারে (আইই, উইন্ডোজ) কাজ করতে পারি না
ক্রিস

আপনি অনুরূপ প্রশ্নের তালিকাভুক্ত লিঙ্কটি সম্পর্কে কথা বলছিলাম।
ক্রিস

আমি যে প্রশ্নটি যুক্ত করেছি তাতে কোনও বিজয়ী উত্তর নেই ... আপনি যদি শীর্ষতম উত্তরটি বোঝাতে চান তবে এটি সত্যিই কার্যকর সমাধান নয়। আইই দিয়ে, আপনি পূর্বোক্ত প্রশ্নের উত্তরে প্রদত্ত এইচটিএ পদ্ধতির চেষ্টা করতে পারেন।
Kkyy

18
আপনার iframe src অন্য কোনও ডোমেন থেকে থাকলে এটি কাজ করে না।
19:40

আমরা যদি sandbox="allow-same-origin"আইফ্রেমে এট্রিবিউটটি যুক্ত করি তবে কী হবে ?
রোল

26

যদি আপনার আইফ্রেমে অন্য ডোমেন, (ক্রস ডোমেন) থেকে থাকে তবে অন্যান্য উত্তরগুলি আপনাকে সাহায্য করবে না ... আপনার কেবল এটি ব্যবহার করতে হবে:

var currentUrl = document.referrer;

এবং - এখানে আপনি মূল url পেয়েছেন!


28
-1 ওপি ইফ্রামের বর্তমান ইউআরএল খুঁজছে, মূল পৃষ্ঠার রেফারার নয়।
ক্রিস্টোফ

15
@ ক্রিস্টোফ - আমি জানি, তবে এটি মূল ইউআরএল খুঁজছেন এবং এই প্রশ্নে আসতে লোকদের সহায়তা করতে পারে!
পারপার

6
gr8 .. এটি আমাকে সহায়তা করে
ভিকি

4
এটি ঠিক আমি যা খুঁজছিলাম, এবং এটি আমার এক্স-স্ক্রিপ্ট ত্রুটি না করেই আমার সমস্যা সমাধান করে। তার জন্য +1
ইউলিসেস আলভেস

4
দুর্দান্ত, আমার আইফ্রেমে ইউআরএল দরকার, পিতামাতার নয় :)
স্প্রেটিও 43১ মে'১৯-

4

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

localStorage.setItem("url", myUrl);

এবং কোডে যেখানে iframe উত্সটি কেবল স্থানীয় স্টোরেজ থেকে এই ডেটাটি পান:

localStorage.getItem('url');

আমাকে অনেক সময় বাঁচিয়েছে। যতদূর আমি দেখতে পাচ্ছি একমাত্র শর্ত হ'ল প্যারেন্ট পৃষ্ঠার কোড অ্যাক্সেস। আশা করি এটি কারও সাহায্য করবে।


4
স্থানীয় স্টোরেজ কেবল একই ডোমেনে কাজ করে ... তবে এই সমস্ত সমস্যার সাথে কেন চলছে? কেবল অবস্থানের জিজ্ঞাসা করুন
ইউকি

3

আপনি যদি iframe প্রসঙ্গে থাকেন,

আপনি করতে পারে

const currentIframeHref = new URL(document.location.href);
const urlOrigin = currentIframeHref.origin;
const urlFilePath = decodeURIComponent(currentIframeHref.pathname);

আপনি যদি প্যারেন্ট উইন্ডো / ফ্রেমে থাকেন তবে আপনি https://stackoverflow.com/a/938195/2305243 এর উত্তর ব্যবহার করতে পারেন , যা

document.getElementById("iframe_id").contentWindow.location.href

1

ব্লব url hrefs নিয়ে আমার একটি সমস্যা ছিল। সুতরাং, iframe সম্পর্কিত একটি রেফারেন্স সহ, আমি স্রেফ iframe এর src বৈশিষ্ট্য থেকে একটি url উত্পাদন করেছি:

    const iframeReference = document.getElementById("iframe_id");
    const iframeUrl = iframeReference ? new URL(iframeReference.src) : undefined;
    if (iframeUrl) {
        console.log("Voila: " + iframeUrl);
    } else {
        console.warn("iframe with id iframe_id not found");
    }

0

যারা এর সাথে লড়াই করছেন তাদের জন্য কিছু অতিরিক্ত তথ্য:

আপনি যদি লোড হওয়ার আগেই iframe থেকে URL পাওয়ার চেষ্টা করছেন তবে আপনি নালাগুলি পাচ্ছেন values আমি জাভাস্ক্রিপ্টে পুরো আইফ্রেমে তৈরি করে এবং অন্লোড ফাংশনটির সাথে আমার প্রয়োজনীয় মানগুলি পেয়ে এই সমস্যাটি সমাধান করেছি:

var iframe = document.createElement('iframe');
iframe.onload = function() {

    //some custom settings
    this.width=screen.width;this.height=screen.height; this.passing=0; this.frameBorder="0";

    var href = iframe.contentWindow.location.href;
    var origin = iframe.contentWindow.location.origin;
    var url = iframe.contentWindow.location.url;
    var path = iframe.contentWindow.location.pathname;

    console.log("href: ", href)
    console.log("origin: ", origin)
    console.log("path: ", path)
    console.log("url: ", url)
};

iframe.src = 'http://localhost/folder/index.html';

document.body.appendChild(iframe);

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

এছাড়াও, অবস্থানের বিষয়গুলিতে আরও: https://www.w3schools.com/JSREF/obj_location.asp


0

যদি আপনি এমন একটি আইফ্রেমের অভ্যন্তরে থাকেন যা ক্রস ডোমেন এসসিআর নেই, বা এসসিআর খালি রয়েছে:

তারপরে:

function getOriginUrl() {
    var href = document.location.href;
    var referrer = document.referrer;
    // Check if window.frameElement not null
    if(window.frameElement) {
        href = window.frameElement.ownerDocument.location.href;
        // This one will be origin
        if(window.frameElement.ownerDocument.referrer != "") {
            referrer = window.frameElement.ownerDocument.referrer;
        }
    }
    // Compare if href not equal to referrer
    if(href != referrer) {
        // Take referrer as origin
        return referrer;
    } else {
        // Take href
        return href
    }
}

যদি আপনি ক্রস ডোমেন src সহ একটি iframe এর ভিতরে থাকেন:

তারপরে:

function getOriginUrl() {
    var href = document.location.href;
    var referrer = document.referrer;
    // Detect if you're inside an iframe
    if(window.parent != window) {
        // Take referrer as origin
        return referrer;
    } else {
        // Take href
        return href;
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.