Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как получть нужный url href cо страницы другого домена (https://javascript.ru/forum/misc/78684-kak-polucht-nuzhnyjj-url-href-co-stranicy-drugogo-domena.html)

basil.veber 19.10.2019 16:54

Как получть нужный url href cо страницы другого домена
 
Подскажите пожалуйста решение.
Как получить c site.ru/page.html 2-ю по счету ссылку и повесить ее на <button onclick="url">Открыть</button> на сайте site.com/page.html где будет размещена эта кнопка и этот скрипт.

Malleys 19.10.2019 22:10

На сайте site.ru/page.html добавьте заголовок Access-Control-Allow-Origin: site.com

На сайте site.com/page.htm разместите эту кнопку и этот скрипт...
<button id="my-button">Открыть</button>
<script>

const button = document.getElementById("my-button");
	
fetch("http://site.ru/page.html").then(async response => {
	const parser = new DOMParser();
	return parser.parseFromString(await response.text(), "text/html");
}).then(loadedDocument => {
	button.onclick = () => open(loadedDocument.links[1].href)
}).catch(error => {
	button.remove();
});

</script>

basil.veber 23.10.2019 21:52

Malleys,
Спасибо за ответ. Но есть один момент. Сайт site.ru/page.html мне не принадлежит с которого хочу получить ссылку, поэтому заголовок прописать нет возможности. А будет это работать если на своем сайте я сначала выведу страницу чужого через фрейм, а потом уже обращусь через скрипт к ней?

Malleys 23.10.2019 22:55

Цитата:

Сообщение от basil.veber
А будет это работать если на своем сайте я сначала выведу страницу чужого через фрейм, а потом уже обращусь через скрипт к ней?

Нет, но вы можете использовать сервис, который добавит нужные заголовки для работы в браузере, например, CORS Proxy... Вы можете добавить перед адресом запроса https://corsproxy.glitch.me/ и это будет работать, но я вам рекомендую использовать свой сервер, где будет запущен CORS Proxy, и который будет настроен под вас (например, ограничение доступа).

Например, тогда можно взять вторую ссылку с Яндекса...
<button id="my-button">Открыть</button>
<script>

const button = document.getElementById("my-button");
	
fetch("https://corsproxy.glitch.me/https://yandex.ru/").then(async response => {
	const parser = new DOMParser();
	return parser.parseFromString(await response.text(), "text/html");
}).then(loadedDocument => {
	button.onclick = () => open(loadedDocument.links[1].href)
}).catch(error => {
	button.remove();
});

</script>

basil.veber 24.10.2019 01:25

Malleys,
Приведенный пример вами и некоторые другие работают, а вот с нужной мне страницей скрипт что-то не хочет. В консоли браузера вот это после клика по кнопке:
Цитата:

Uncaught TypeError: Cannot read property 'href' of undefined
at HTMLButtonElement.button.onclick

.
Видео нужно более точная настройка. Например по классу "link-title" атрибута "а" (<a class="link-title" href="" target=_top title=""><span></span></a>)

Malleys 24.10.2019 03:52

У а потому что берётся вторая по счёту ссылка которая на странице может и не быть.

basil.veber 24.10.2019 13:22

Malleys, перепробовал от links[1] до links[10]. Но на выходе тот же результат.
Подскажите пожалуйста что на что заменить чтобы он тянул ссылку из
Цитата:

a class="link-title"
, так сказать ткнуть его носом в нужный элемент, раз так не видит.

laimas 24.10.2019 13:58

Заменить

button.onclick = () => open(loadedDocument.links[1].href)

на

button.onclick = () => open(loadedDocument.querySelector('a.link-title').href)

это будет первая ссылка с таким именем класса из имеющихся на странице. Если надо иную, то querySelectorAll('a.link-title')[нужный индекс]

basil.veber 24.10.2019 15:32

laimas, работает. Но по какой-то причине ссылка не передается. Открыается пустая вкладка about:blank

laimas 24.10.2019 15:55

Цитата:

Сообщение от basil.veber
работает ... Открыается пустая вкладка about:blank

Так работает или не работает? :)


Часовой пояс GMT +3, время: 14:01.