IFRAME से वर्तमान URL प्राप्त करें


91

क्या आइफ्रेम से वर्तमान URL प्राप्त करने का एक सरल तरीका है?

दर्शक कई साइटों से गुजर रहा होगा। मुझे लगता है मैं जावास्क्रिप्ट में कुछ का उपयोग किया जाएगा अनुमान लगा रहा हूँ।


2
यदि आप
इफ्रे

जवाबों:


165

सुरक्षा कारणों से, आप केवल तब तक url प्राप्त कर सकते हैं, जब तक कि iframe की सामग्री, और संदर्भित जावास्क्रिप्ट, एक ही डोमेन से दिए गए हों। जब तक यह सच है, इस तरह से कुछ काम करेगा:

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

यदि दो डोमेन बेमेल हैं, तो आप क्रॉस साइट संदर्भ सुरक्षा सुरक्षा प्रतिबंधों में चलेंगे।

एक ऐसे ही सवाल का जवाब भी देखें ।


क्या आपको पता है कि विजेता उत्तर द्वारा प्रदान किया गया समाधान काम करता है? मैं इसे अपने कंप्यूटर (आईई, विंडोज़) पर काम करने के लिए नहीं पा सका
क्रिस

मैं उस लिंक के बारे में बात कर रहा था जिसे आप इसी तरह के प्रश्न के लिए सूचीबद्ध करते हैं।
क्रिस

मेरे द्वारा लिंक किए गए प्रश्न में कोई जीतने वाला उत्तर नहीं है ... यदि आपका मतलब सबसे ऊपर वाला उत्तर है, तो यह वास्तव में काम करने वाला समाधान नहीं है। IE के साथ, आप उपरोक्त प्रश्न के उत्तर में भी उपलब्ध HTA दृष्टिकोण की कोशिश कर सकते हैं।
kkyy

18
यदि आपका iframe src भिन्न डोमेन से है तो यह काम नहीं करता है।
confile

क्या होगा अगर हम sandbox="allow-same-origin"iFrame में विशेषता जोड़ते हैं ?
Roel

26

यदि आपका iframe किसी अन्य डोमेन, (क्रॉस डोमेन) से है, तो अन्य उत्तर आपकी सहायता करने वाले नहीं हैं ... आपको बस इसका उपयोग करने की आवश्यकता होगी:

var currentUrl = document.referrer;

और - यहाँ आपको मुख्य यूआरएल मिला है!


28
-1 ओपी, iframe के वर्तमान url की तलाश कर रहा है, अभिभावक पृष्ठ का संदर्भ देने वाला नहीं।
क्रिस्टोफ

15
@Christophe - मुझे पता है, लेकिन यह मुख्य यूआरएल प्राप्त करने के लिए लोगों की मदद कर सकता है और इस सवाल पर आया है!
ParPar

6
gr8 .. यह मेरी मदद करता है
विकी

1
यह वही है जो मैं देख रहा था, और यह मुझे एक्स-स्क्रिप्ट त्रुटि दिए बिना मेरी समस्या को हल करता है। इसके लिए +1
यूलिसिस अल्वेस

1
बहुत बढ़िया, मुझे iframe url की आवश्यकता है, माता-पिता की नहीं :)
speti43

4

आशा है कि यह आपके मामले में कुछ मदद करेगा, मुझे ठीक उसी समस्या का सामना करना पड़ा, और सिर्फ स्थानीय विंडो का उपयोग पेरेंट विंडो और आइफ्रेम के बीच डेटा साझा करने के लिए किया। तो मूल विंडो में आप कर सकते हैं:

localStorage.setItem("url", myUrl);

और कोड में जहां iframe स्रोत सिर्फ स्थानीय डेटा से यह डेटा मिलता है:

localStorage.getItem('url');

मुझे बहुत समय बचाया। जहां तक ​​मैं देख सकता हूं कि एकमात्र शर्त पेरेंट पेज कोड तक पहुंच है। आशा है कि यह किसी की मदद करेगा।


4
स्थानीय संग्रहण केवल एक ही डोमेन पर काम करता है ... तो इस परेशानी के साथ क्यों? बस लोकेशन को क्वेरी करें।
Yuki

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 प्राप्त करने का प्रयास कर रहे हैं, तो आपको शून्य मान मिलेंगे। मैंने जावास्क्रिप्ट में संपूर्ण iframe बनाकर और onLoad फ़ंक्शन के साथ आवश्यक मान प्राप्त करके इस समस्या को हल किया:

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

यदि आप एक iframe के अंदर हैं, जिसमें क्रॉस डोमेन src नहीं है, या src खाली है:

फिर:

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
    }
}

यदि आप क्रॉस डोमेन के साथ एक 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;
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.