Como mostrar google.com em um iframe?


121

Estou tentando colocar google.com em um iframe no meu site; isso funciona com muitos outros sites, incluindo o yahoo. Mas não funciona com o Google, pois mostra apenas um iframe em branco. Por que não renderiza? Existem truques para fazer isso?

Eu tentei de uma maneira normal para mostrar um site em um iframe como este:

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

A página google.com não é renderizada no iframe, apenas fica em branco. O que está acontecendo?


Por que você precisa mostrar o Google em um iframe?
Paul Alan Taylor

Não me cite, mas talvez o google use algo parecido window.propertyou algo assim, que, dentro de um IFrame, quebraria parte do display?
anonimamente

se quiser a barra de pesquisa do Google, consulte este link: google.com/webelements/#!/custom-search
mgraph

@PaulAlanTaylor Era uma exigência do meu cliente, foi dito que ele queria mostrar o resultado do google em seu site à mão em um iframe.
Bala

11
Basta fazer isso:<iframe src="https://www.google.com/webhp?igu=1"></iframe>
Niutech

Respostas:


117

A razão para isso é que o Google está enviando um cabeçalho de resposta "X-Frame-Options: SAMEORIGIN". Esta opção evita que o navegador exiba iframes que não estejam hospedados no mesmo domínio da página pai.

Vejo: Mozilla Developer Network - O cabeçalho de resposta X-Frame-Options


18
Eu acho que isso é bastante inútil. Se alguém puder pensar em uma razão para usar esse recurso além de ser apenas mau, sinta-se à vontade para me dizer.
anonimamente

15
@JonHanna não basta entrar em contato com o Google para nada.
Albert

23
Você pode usar este URL em iframe: google.com/search?igu=1
niutech

1
Ou você pode usar meu componente da Web X-Frame-Bypass .
niutech

4
@niutech Incrivelmente, sua URL com o parâmetro? igu = 1 funciona. Alguma ideia do porquê? Qual é o propósito original por trás dessa opção? Curiosamente, isso faz com que eu apareça como não conectado, mas o campo de pesquisa ainda sugere algumas das minhas pesquisas históricas reais. Então estou "meio que" logado. Muito estranho.
Mark Thomson

28

NÃO É IMPOSSÍVEL.
Use um servidor proxy reverso para lidar com o problema de origem diferente. Eu costumava usar o Nginx com proxy_passpara alterar o url da página. Você pode tentar.

Outra forma é escrever uma página proxy simples executada no servidor por você mesmo, basta solicitar do Google e enviar o resultado para o cliente.


8
O Google bloqueou minhas tentativas simples de curvar seu URL de pesquisa padrão. :( Acabei usando "Google Custom" que envia diferentes X-Frame-Options. Google.com/custom?q=test&btnG=Search
Joel Mellon

7
Existe um tutorial sobre como resolver esse problema com o Nginx?
Preto de

21

Conforme descrito aqui, como o Google está enviando um cabeçalho de resposta "X-Frame-Options: SAMEORIGIN", você não pode simplesmente definir o src como " http://www.google.com " em um iframe.

Se você deseja incorporar o Google a um iframe, você pode fazer o que as pessoas sugeriram no comentário acima e usar um link de pesquisa personalizado do Google como o seguinte. Isso funcionou muito bem para mim (deixe 'q =' em branco para começar com a pesquisa em branco).

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

EDITAR:

Esta resposta não funciona mais. Para obter informações e instruções sobre como substituir uma pesquisa iframe por um elemento de pesquisa personalizado do Google, confira: https://support.google.com/customsearch/answer/2641279


Thx ScottyG! Existe alguma opção para adicionar resultados de imagens?
Krzysztof Przygoda

Ei, Krzysztof Przygoda, acho que você pode forçar uma pesquisa de imagens com um src como: http://www.google.com/search?site=imghp&tbm=isch&q='searchstring'mas porque usa a pesquisa? e não personalizado? você não poderá usá-lo em um iframe
ScottyG

1
@ScottyG A técnica acima ainda é válida? Tentei deixar essa linha em uma página em branco e tudo o que recebo é um iframe em branco, mesmo quando forneço uma consulta
Andres,

2
Olá, Andres, parece que você está certo. Eu não sou mais capaz de fazer isso funcionar para mim. O link de pesquisa personalizada agora redireciona para google.ca/webhp?btnG=&gws_rd=ssl que força ssl e parece estar bloqueado em um iframe agora. Vou continuar investigando isso, mas parece que a festa pode acabar neste aqui ... :(
ScottyG

8

Você pode ignorar as opções do X-Frame em um usando YQL.

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>

Execute aqui: http://jsfiddle.net/2gou4yen/

Código a partir daqui: Como posso ignorar as opções de X-Frame: cabeçalho HTTP SAMEORIGIN?


3
Está funcionando, mas não pela primeira vez. Se eu abrir minha página da web na qual eu incorporo, tenho que clicar em atualizar para carregar a página pela primeira vez. Depois disso, será bom.
Vivek Sinha

@ TV-C-15 Funciona ao substituir http://query.yahooapis.compor https://query.yahooapis.com.
Niutech

testado também no codepen [ codepen.io/anon/pen/Xyqqvb] e funciona (embora às vezes exija uma atualização) no firefox, chrome, opera, não funciona no limite, MAS se eu copiar localmente e abrir no navegador, ele continua a recarregue a página ... aqui está o script completo: [ files.fm/u/arzrb2h4]
Joe

1
não está funcionando. Existe alguma outra maneira de abrir o Google em um iframe?
Krishna

3

Você pode resolver usando o Google CSE (Custom Searche Engine), que pode ser facilmente inserido em um iframe. Você pode criar seu próprio mecanismo de busca, que busca sites selecionados ou também em todo o banco de dados do Google.

Os resultados podem ter o estilo de sua preferência, também semelhante ao estilo do Google. O Google CSE funciona com pesquisa na web e imagens.

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

Isso costumava funcionar porque eu o usava para criar pesquisas personalizadas no Google com minhas próprias opções. O Google fez alterações e quebrou minha página de pesquisa personalizada privada :( O exemplo abaixo não funciona mais. Foi muito útil para padrões de pesquisa complexos.

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

rede

Acho que a melhor opção é apenas usar Curl ou similar.


1

Não é o ideal, mas você pode usar um servidor proxy e funciona bem. Por exemplo, vá para hidemyass.com coloque em www.google.com e coloque o link para onde ele vai em um iframe e funciona!


0

Se estiver usando PHP, você pode usar file_get_contents()para imprimir o conteúdo:

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

Isso irá imprimir qualquer conteúdo file_get_contents() função de obtida neste url. Observe que, como você está exibindo o conteúdo como string em vez de uma página da web real, coisas como imagens de caminho relativo não são mostradas corretamente, porque /img/myimg.jpg agora está carregando de seu servidor e não mais de google.com.

No entanto, você pode brincar com alguns truques como a str_replace()função de substituir urls absolutos em imagens:

<?php
$page = file_get_contents('https://www.google.com');
echo str_replace('src="img/','src="https://google.com/img/',$page);
?>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.