Google.com bir iframe içinde nasıl gösterilir?


121

Google.com'u web sitemdeki bir iframe'e koymaya çalışıyorum, bu yahoo dahil diğer birçok web sitesinde çalışıyor. Ancak, yalnızca boş bir iframe gösterdiği için google ile çalışmaz. Neden işlenmiyor? Bunu yapmak için herhangi bir numara var mı?

Bir web sitesini şunun gibi bir iframe'de göstermek için her zamanki şekilde denedim:

<iframe name="I1" id="if1" width="100%" 
 height="254" style="visibility:visible" 
 src="http://www.google.com"></iframe>

Google.com sayfası iframe'de görüntülenmez, yalnızca boştur. Ne oluyor?


Google'a neden bir iframe içinde göstermeniz gerekiyor?
Paul Alan Taylor

Benden alıntı yapmayın, ama belki google window.propertybir IFrame içinde ekranın bir bölümünü kıracak gibi bir şey kullanıyor olabilir mi?
16'da anonim olarak

google arama çubuğunu istiyorsanız şu bağlantıya bakın: google.com/webelements/#!/custom-search
mgraph

@PaulAlanTaylor Müvekkilimin ihtiyacıydı, google sonucunu web sitesinde bir iframe içinde kullanışlı göstermek istediği söylendi.
Bala

11
Sadece şunu yapın:<iframe src="https://www.google.com/webhp?igu=1"></iframe>
niutech

Yanıtlar:


117

Bunun nedeni, Google'ın bir "X-Frame-Options: SAMEORIGIN" yanıt başlığı göndermesidir. Bu seçenek, tarayıcının üst sayfayla aynı etki alanında barındırılmayan iFrame'leri görüntülemesini engeller.

Bakınız: Mozilla Developer Network - X-Frame-Options yanıt başlığı


18
Bunun oldukça faydasız olduğunu düşünüyorum. Bu özelliği kullanmak için kaba olmanın dışında bir neden düşünen varsa, bana söylemekten çekinmeyin.
27'de anonim olarak

15
@JonHanna one hiçbir şey için Google ile iletişime geçmez.
albert

23
Bu URL'yi iframe
şurada

1
Veya X-Frame-Bypass Web Bileşenimi kullanabilirsiniz.
niutech

4
@niutech İnanılmaz bir şekilde,? igu = 1 parametresiyle URL'niz çalışıyor. Herhangi bir fikrin neden? Bu seçeneğin arkasındaki asıl amaç nedir? İlginç bir şekilde, bu oturum açmamış olarak göstermeme neden oluyor, ancak arama alanı hala bazı gerçek geçmiş aramalarımı öneriyor. Bu yüzden "biraz" giriş yaptım. Çok tuhaf.
Mark Thomson

28

İMKANSIZ DEĞİL.
Farklı Köken Sorununu çözmek için bir ters proxy sunucusu kullanın. proxy_passSayfanın url'sini değiştirmek için Nginx kullanıyordum . deneyebilirsin.

Başka bir yol, sunucuda kendi başınıza çalışan basit bir proxy sayfası yazmaktır, sadece Google'dan isteyin ve sonucu istemciye gönderin.


8
Google, standart arama URL'lerini kıvırmak için yaptığım basit girişimleri engelledi. :( Farklı X-Frame-Seçenekleri gönderen "Google Özel" i kullandım. Google.com/custom?q=test&btnG=Search
Joel Mellon

7
Bu sorunun Nginx ile nasıl çözüleceğine dair bir eğitim var mı?
Siyah

21

Burada açıklandığı gibi, Google bir "X-Frame-Options: SAMEORIGIN" yanıt başlığı gönderdiği için src'yi "olarak ayarlayamazsınız" http://www.google.com " olarak .

Google'ı bir iframe içine yerleştirmek istiyorsanız, sudopople'ın yukarıdaki bir yorumda önerdiği şeyi yapabilir ve aşağıdaki gibi bir Google özel arama bağlantısı kullanabilirsiniz. Bu benim için harika çalıştı (boş aramayla başlamak için 'q =' boş bırakıldı).

<iframe id="if1" width="100%" height="254" style="visibility:visible" src="http://www.google.com/custom?q=&btnG=Search"></iframe>

DÜZENLE:

Bu cevap artık işe yaramıyor. Bir iframe aramasının bir google özel arama öğesiyle nasıl değiştirileceğiyle ilgili bilgi ve talimatlar için şu adrese bakın: https://support.google.com/customsearch/answer/2641279


Thx ScottyG! Görsel sonuçları eklemek için herhangi bir seçenek var mı?
Krzysztof Przygoda

Hey Krzysztof Przygoda Sanırım src gibi bir görsel aramaya zorlayabilirsiniz: http://www.google.com/search?site=imghp&tbm=isch&q='searchstring'ama aramayı kullandığı için? ve özel değil mi? bunu bir iframe'de kullanamayacaksınız
ScottyG

1
@ScottyG Yukarıdaki teknik hala geçerli mi? Bu satırı boş bir sayfaya bırakmayı denedim ve bir sorgu sağlasam bile aldığım tek şey boş bir iframe
Andres

2
Merhaba Andres, görünüşe göre haklısın. Artık bunun benim için çalışmasını sağlayamıyorum. Özel arama bağlantısı artık google.ca/webhp?btnG=&gws_rd=ssl adresine yönlendiriyor, bu da ssl'yi zorlar ve şimdi bir iframe'de engellenmiş gibi görünür. Bunu araştırmaya devam edeceğim ama görünüşe göre parti bu
sefer bitmiş

8

YQL kullanarak X-Frame-Options'ı atlayabilirsiniz.

var iframe = document.getElementsByTagName('iframe')[0];
var url = iframe.src;
var getData = function (data) {
    if (data && data.query && data.query.results && data.query.results.resources && data.query.results.resources.content && data.query.results.resources.status == 200) loadHTML(data.query.results.resources.content);
    else if (data && data.error && data.error.description) loadHTML(data.error.description);
    else loadHTML('Error: Cannot load ' + url);
};
var loadURL = function (src) {
    url = src;
    var script = document.createElement('script');
    script.src = 'https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20data.headers%20where%20url%3D%22' + encodeURIComponent(url) + '%22&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=getData';
    document.body.appendChild(script);
};
var loadHTML = function (html) {
    iframe.src = 'about:blank';
    iframe.contentWindow.document.open();
    iframe.contentWindow.document.write(html.replace(/<head>/i, '<head><base href="' + url + '"><scr' + 'ipt>document.addEventListener("click", function(e) { if(e.target && e.target.nodeName == "A") { e.preventDefault(); parent.loadURL(e.target.href); } });</scr' + 'ipt>'));
    iframe.contentWindow.document.close();
}

loadURL(iframe.src);
<iframe src="http://www.google.co.in" width="500" height="300"></iframe>

Burada çalıştırın: http://jsfiddle.net/2gou4yen/

Kod buradan: X-Frame-Options: SAMEORIGIN HTTP Başlığını Nasıl Atlayabilirim?


3
Çalışıyor ama ilk defa değil. Gömülü olduğum web sayfamı açarsam, sayfayı ilk kez yüklemek için yenile tuşuna basmam gerekir. Ondan sonra iyi olacak.
Vivek Sinha

@ TV-C-15 http://query.yahooapis.comile değiştirdiğinizde çalışır https://query.yahooapis.com.
niutech

codepen [ codepen.io/anon/pen/Xyqqvb] üzerinde de test edildi ve firefox, chrome, opera üzerinde çalışıyor (bazen yenileme gerektirse de), uçta çalışmıyor ANCAK yerel olarak kopyalayıp tarayıcıya açarsam sayfayı yeniden yükleyin..burada tam komut dosyası: [ files.fm/u/arzrb2h4]
Joe

1
çalışmıyor. Google'ı bir iframe'de açmanın başka bir yolu var mı?
Krishna

3

Bir iframe'e kolayca eklenebilen Google CSE'yi (Özel Arama Motoru) kullanarak çözebilirsiniz . Seçili sitelerde veya tüm Google veritabanında arama yapan kendi arama motorunuzu oluşturabilirsiniz.

Sonuçlar, Google stiline benzer şekilde, tercihinize göre şekillendirilebilir. Google CSE, web ve görsel arama ile çalışır.

google.php

<script>
  (function() {
    var cx = 'xxxxxxxxxxxxxxxxxxxxxx';
    var gcse = document.createElement('script');
    gcse.type = 'text/javascript';
    gcse.async = true;
    gcse.src = 'https://cse.google.com/cse.js?cx=' + cx;
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(gcse, s);
  })();
</script>
<gcse:searchresults-only></gcse:searchresults-only>

yourpage.php

<iframe src="google.php?q=<?php echo urlencode('your query'); ?>"></iframe>

2

Bu işe yarıyordu çünkü bunu kendi seçeneklerimle özel Google aramaları oluşturmak için kullandım. Google kendi tarafında değişiklikler yaptı ve özel özelleştirilmiş arama sayfamı bozdu :( Artık aşağıdaki örnek çalışmıyor. Karmaşık arama modelleri için çok yararlıydı.

<form method="get" action="http://www.google.com/search" target="main"><input name="q" value="" type="hidden"> <input name="q" size="40" maxlength="2000" value="" type="text">

Sanırım daha iyi seçenek sadece Curl veya benzerini kullanmak.


1

İdeal değil ama bir proxy sunucusu kullanabilirsiniz ve iyi çalışıyor. Örneğin hidemyass.com'a gidin, www.google.com'u girin ve gittiği bağlantıyı bir iframe'e koyun ve çalışır!


0

PHP kullanıyorsanız file_get_contents(), içeriği yazdırmak için kullanabilirsiniz :

<?php
$page = file_get_contents('https://www.google.com');
echo $page;
?>

Bu, file_get_contents()bu url'de bulunan içerik işlevini yazdıracaktır . Lütfen içeriği gerçek bir web sayfası yerine dize olarak görüntülediğinizden, göreli yol resimleri gibi şeylerin doğru şekilde gösterilmediğini unutmayın, çünkü /img/myimg.jpg artık google.com'dan değil sunucunuzdan yükleniyor.

Bununla birlikte, str_replace()resimlerdeki mutlak URL'leri değiştirmek için işlev gibi bazı hilelerle oynayabilirsiniz :

<?php
$page = file_get_contents('https://www.google.com');
echo str_replace('src="img/','src="https://google.com/img/',$page);
?>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.