जवाबों:
मूल रूप से HTML को वेब पेज में एम्बेड करने के 4 तरीके हैं:
<iframe>
एक iframe की सामग्री आपके पृष्ठ की तुलना में पूरी तरह से अलग संदर्भ में रहती है। जबकि यह ज्यादातर एक महान विशेषता है और यह ब्राउज़र संस्करणों के बीच सबसे अधिक संगत है, यह अतिरिक्त चुनौतियां पैदा करता है (फ्रेम के आकार को अपनी सामग्री से लपेटना मुश्किल है, स्क्रिप्ट के अंदर / बाहर, शैली के लिए लगभग असंभव है)।XMLHttpRequest
ऑब्जेक्ट को डेटा प्राप्त करने के लिए उपयोग कर सकते हैं और इसे अपने पेज पर इंजेक्ट कर सकते हैं। यह आदर्श नहीं है क्योंकि यह स्क्रिप्टिंग तकनीकों पर निर्भर करता है, इस प्रकार निष्पादन कमियों और अन्य कमियों के बीच अधिक जटिल है ।HTML5 वेब घटक । HTML आयात, वेब घटक का हिस्सा, HTML दस्तावेज़ों को अन्य HTML दस्तावेज़ों में बंडल करने की अनुमति देता है। यही कारण है कि शामिल है HTML
, CSS
, JavaScript
या कुछ और एक .html
फ़ाइल हो सकते हैं। यह कई दिलचस्प उपयोग के मामलों के साथ एक शानदार समाधान बनाता है: एक ऐप को बंडल घटकों में विभाजित करें जिन्हें आप बिल्डिंग ब्लॉक्स के रूप में वितरित कर सकते हैं, अतिरेक, कोड संगठन आदि से बचने के लिए बेहतर प्रबंधन निर्भरताएं। यहां एक तुच्छ उदाहरण है:
<!-- Resources on other origins must be CORS-enabled. -->
<link rel="import" href="http://example.com/elements.html">
मूल संगतता अभी भी एक मुद्दा है, लेकिन आप इसे आज के सदाबहार ब्राउज़रों में काम करने के लिए एक पॉलीफ़िल का उपयोग कर सकते हैं ।
आप ऑब्जेक्ट का उपयोग कर सकते हैं और एम्बेड कर सकते हैं, जैसे:
<object data="http://www.web-source.net" width="600" height="400">
<embed src="http://www.web-source.net" width="600" height="400"> </embed>
Error: Embedded data could not be displayed.
</object>
जो नया नहीं है, लेकिन फिर भी काम करता है। मुझे यकीन नहीं है कि यह एक ही कार्यक्षमता है, हालांकि।
नहीं, कोई समकक्ष नहीं है। <iframe>
तत्व अभी भी एचटीएमएल 5 में मान्य है। आपको अलग-अलग API हो सकते हैं, इसके लिए आपको किस सटीक सहभागिता पर निर्भर करता है। उदाहरण के लिए वहाँ postMessage
विधि है जो आपको क्रॉस डोमेन जावास्क्रिप्ट इंटरैक्शन प्राप्त करने की अनुमति देती है। लेकिन अगर आप क्रॉस डोमेन HTML सामग्री (सीएसएस के साथ स्टाइल और जावास्क्रिप्ट के साथ इंटरेक्टेड) प्रदर्शित करना चाहते हैं, तो यह iframe
एक अच्छा तरीका है।
object
HTML5 में एक आसान विकल्प है:
<object data="https://blogs.claritycon.com/blog/2016/03/bower-packages-asp-net-core-1-0/" width="400" height="300" type="text/html">
Alternative Content
</object>
आप भी आजमा सकते हैं embed
:
<embed src="https://blogs.claritycon.com/blog/2016/03/bower-packages-asp-net-core-1-0/" width=200 height=200 onerror="alert('URL invalid !!');" />
यदि आप ऐसा करना चाहते हैं और उस सर्वर को नियंत्रित करना चाहते हैं जिससे आधार पृष्ठ या सामग्री परोसी जा रही है, तो आप क्लाइंट को अनुमति देने के लिए क्रॉस ओरिजिनल रिसोर्स शेयरिंग ( http://www.w3.org/TR/access-control/ ) का उपयोग कर सकते हैं । पक्ष जावास्क्रिप्ट डेटा को एक <div>
माध्यम से लोड करने के लिए XMLHttpRequest()
:
// I safely ignore IE 6 and 5 (!) users
// because I do not wish to proliferate
// broken software that will hurt other
// users of the internet, which is what
// you're doing when you write anything
// for old version of IE (5/6)
xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if(xhr.readyState == 4 && xhr.status == 200) {
document.getElementById('displayDiv').innerHTML = xhr.responseText;
}
};
xhr.open('GET', 'http://api.google.com/thing?request=data', true);
xhr.send();
अब इस पूरे ऑपरेशन के लिंचपिन के लिए, आपको अपने सर्वर के लिए कोड लिखना होगा जो क्लाइंट को Access-Control-Allow-Origin
हेडर देगा, यह निर्दिष्ट करते हुए कि आप किस डोमेन से क्लाइंट-साइड कोड को एक्सेस करना चाहते हैं XMLHttpRequest()
। निम्नलिखित PHP कोड का एक उदाहरण है जिसे आप अपने पेज के शीर्ष पर शामिल कर सकते हैं ताकि इन हेडर को ग्राहकों को भेजा जा सके:
<?php
header('Access-Control-Allow-Origin: http://api.google.com');
header('Access-Control-Allow-Origin: http://some.example.com');
?>
यह भी काम करने लगता है, हालांकि W3C निर्दिष्ट करता है कि यह "बाहरी (आमतौर पर गैर-एचटीएमएल) अनुप्रयोग और इंटरैक्टिव" के लिए नहीं है
<embed src="http://www.somesite.com" width=200 height=200 />
अधिक जानकारी: http://www.w3.org/wiki/HTML/Elements/embed http://www.w3schools.com/tags/tag_embed.asp
क्रॉस-डोमेन दृश्य सामग्री डाउनलोड करने के लिए एक आइफ्रेम अभी भी सबसे अच्छा तरीका है। AJAX के साथ आप निश्चित रूप से HTML को एक वेब पेज से डाउनलोड कर सकते हैं और इसे div में चिपका सकते हैं (जैसा कि दूसरों ने उल्लेख किया है) हालांकि बड़ी समस्या सुरक्षा है। Iframes के साथ आप क्रॉस डोमेन कंटेंट को लोड करने में सक्षम होंगे, लेकिन तब तक इसमें हेरफेर नहीं कर पाएंगे, क्योंकि कंटेंट वास्तव में आपका नहीं है। AJAX के साथ आप निश्चित रूप से किसी भी सामग्री को डाउनलोड करने में सक्षम होने के लिए हेरफेर कर सकते हैं, लेकिन दूसरे डोमेन के सर्वर को इस तरह से सेटअप करने की आवश्यकता है जो आपको इसे डाउनलोड करने की अनुमति देगा। बहुत बार आपके पास दूसरे डोमेन के कॉन्फ़िगरेशन तक पहुंच नहीं होगी और यदि आप करते हैं, तब तक जब तक आप उस तरह के कॉन्फ़िगरेशन को पूरे समय तक नहीं करते, तब तक यह सिरदर्द हो सकता है। जिस स्थिति में iframe MUCH आसान विकल्प हो सकता है।
जैसा कि दूसरों ने उल्लेख किया है कि आप एम्बेड टैग और ऑब्जेक्ट टैग का भी उपयोग कर सकते हैं, लेकिन यह जरूरी नहीं है कि आइफ्रेम की तुलना में अधिक उन्नत या नया हो।
एचटीएमएल 5 क्रॉस डोमेन से जानकारी प्राप्त करने के लिए वेब एपीआई को अपनाने की दिशा में अधिक चला गया है। आमतौर पर वेब एपीआई केवल डेटा लौटाते हैं, हालांकि HTML नहीं।
nice-to-know
आप किसी पृष्ठ को div (या वास्तव में आपके पृष्ठ के किसी भी अन्य तत्व) में लोड करने के लिए XMLHttpRequest का उपयोग कर सकते हैं। एक अनुकरणीय कार्य होगा:
function loadPage(){
if (window.XMLHttpRequest){
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}else{
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
document.getElementById("ID OF ELEMENT YOU WANT TO LOAD PAGE IN").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST","WEBPAGE YOU WANT TO LOAD",true);
xmlhttp.send();
}
यदि आपकी स्थिति सक्षम है, तो आप ऐसा करने के लिए PHP का उपयोग भी कर सकते हैं, लेकिन जब से आप एचटीएमएल 5 विधि के लिए पूछ रहे हैं, तो आपको इसकी आवश्यकता होनी चाहिए।
मैंने इस समस्या नोड-iframe-प्रतिस्थापन को हल करने के लिए एक नोड मॉड्यूल बनाया । आप अपनी सामग्री को इंजेक्ट करने के लिए मूल साइट और CSS चयनकर्ता का स्रोत URL प्रदान करते हैं और यह दोनों को एक साथ जोड़ता है।
मूल साइट में परिवर्तन हर 5 मिनट में किया जाता है।
var iframeReplacement = require('node-iframe-replacement');
// add iframe replacement to express as middleware (adds res.merge method)
app.use(iframeReplacement);
// create a regular express route
app.get('/', function(req, res){
// respond to this request with our fake-news content embedded within the BBC News home page
res.merge('fake-news', {
// external url to fetch
sourceUrl: 'http://www.bbc.co.uk/news',
// css selector to inject our content into
sourcePlaceholder: 'div[data-entityid="container-top-stories#1"]',
// pass a function here to intercept the source html prior to merging
transform: null
});
});
स्रोत में बीबीसी न्यूज के होम पेज में सामग्री को इंजेक्ट करने का एक कार्यशील उदाहरण है ।
आपको JSON-P पर एक नज़र डालनी चाहिए - जब मेरे पास यह समस्या थी तो मेरे लिए एक सही समाधान था:
https://en.wikipedia.org/wiki/JSONP
आप मूल रूप से एक जावास्क्रिप्ट फ़ाइल को परिभाषित करते हैं जो आपके सभी डेटा और एक अन्य जावास्क्रिप्ट फ़ाइल को लोड करती है जो इसे संसाधित और प्रदर्शित करती है। यह इफराम के बदसूरत स्क्रॉलबार से छुटकारा दिलाता है।