отказался отображать в кадре (установить X-Frame-Option) в SAMEORIGIN) [дублировать]

Используя ES2017, вы должны иметь это как объявление функции

async function foo() {
    var response = await $.ajax({url: '...'})
    return response;
}

и выполнить его следующим образом.

(async function() {
    try {
        var result = await foo()
        console.log(result)
    } catch (e) {}
})()

Или синтаксис Promise

foo().then(response => {
    console.log(response)

}).catch(error => {
    console.log(error)

})
91
задан Eric Leschinski 15 April 2015 в 19:21
поделиться

7 ответов

Причина этого заключается в том, что Google отправляет заголовок ответа «X-Frame-Options: SAMEORIGIN». Этот параметр запрещает браузеру отображать iFrames, которые не размещены в том же домене, что и родительская страница.

См.: Сеть разработчиков Mozilla - заголовок ответа X-Frame-Options

95
ответ дан Andreas Koch 31 August 2018 в 13:33
поделиться

Вы можете обойти X-Frame-Options в использовании 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 = 'http://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>

Запустить его здесь.

http://jsfiddle.net / 2gou4yen /

Код отсюда: Как я могу обойти X-Frame-Options: SAMEORIGIN HTTP Header?

6
ответ дан Community 31 August 2018 в 13:33
поделиться

НЕВОЗМОЖНО. Используйте обратный прокси-сервер для обработки проблемы различного происхождения. Я использовал Nginx с proxy_pass, чтобы изменить URL страницы. вы можете попробовать.

Другой способ - написать простую страницу прокси на сервере самостоятельно, просто запросить у Google и вывести результат клиенту.

26
ответ дан ijse 31 August 2018 в 13:33
поделиться

Это работало, потому что я использовал его для создания пользовательских поисковых запросов Google с помощью моих собственных опций. Google сделал изменения на своем конце и нарушил мою личную страницу поиска по запросу :( Больше не работал образец ниже. Это было очень полезно для сложных шаблонов поиска.

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

web

Я думаю лучший вариант - просто использовать Curl или аналогичный.

1
ответ дан jim 31 August 2018 в 13:33
поделиться

Не идеальна, но вы можете использовать прокси-сервер, и он отлично работает. Например, перейдите на hidemyass.com, зайдите на сайт www.google.com и поместите ссылку, в которую он входит, в iframe, и он работает!

1
ответ дан Monty 31 August 2018 в 13:33
поделиться

Как было указано здесь, поскольку Google отправляет заголовок ответа «X-Frame-Options: SAMEORIGIN», вы не можете просто установить src на « http://www.google.com "в iframe.

Если вы хотите встроить Google в iframe, вы можете сделать то, что sudopeople предложили в комментарии выше, и использовать ссылку для пользовательского поиска Google, как показано ниже. Это отлично работает для меня (слева «q =» пуст, чтобы начать с пустого поиска).

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

EDIT:

Этот ответ больше не работает. Для получения информации и инструкций по замене поиска iframe с помощью элемента пользовательского поиска google: https://support.google.com/customsearch/answer/2641279

18
ответ дан ScottyG 31 August 2018 в 13:33
поделиться

Вы можете решить, используя Google CSE (Custom Searche Engine), который можно легко вставить в iframe. Вы можете создать свою собственную поисковую систему, которая будет искать выбранные сайты или всю базу данных Google.

Результаты могут быть стилизованы по вашему выбору, также похожие на стиль Google. Google CSE работает с поиском в Интернете и изображениями.

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>
0
ответ дан WalterV 31 August 2018 в 13:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: