Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][HTML5] Pobieranie zawartoci strony z innej domeny.
Forum PHP.pl > Forum > Przedszkole
fenix.robi
Witam,

Czy ktoś mógłby wskazać dobry przykład wykorzystania HTML5 + JS w pobieraniu zawartości strony z innej domeny.
Rozwiązania oparte o iframe odpadają z wiadomego powodu. PHP też nie wchodzi w grę.

Jeśli znacie też inne sposoby to możecie się podzielić.
sajegib
a może cURL'em?
fenix.robi
Hmm może nie sprecyzowałem, musi to się odbyć po stronie klienta, po prostu na domeniaA przyszykowuje sobie stronę do pobrania, a z domenyB ją pobieram używając tylko technik po stronie klienta, z czego chcem uniknąć używania iframe.
Więc cURL odpada.

P.S. Wdrażam się teraz w JSONP ale nigdzie nie mogę znaleźć co po stronie domenyA mam zrobić żeby wszystko chodziło.
!*!
Nie można pobrać źródła innej domeny, bezpośrednio po stronie klienta, jest to naruszenie bezpieczeństwa.
Połącz się przez ajax do php > return file_get_contents()
fenix.robi
A jak jest zrobiony np LIKE BOX z FaceBooka, przecież mogę go zamiescić, nie używając PHP (w domenie B - tu nie mogę użyc PHP wysietlam uprzednio przyszykowaną stronę z domeny A - tu mogę użyć PHP ) Chodziu mi o ten sam efekt.
!*!
Ajax. A jak chcesz dokładnie wiedzieć jak to działa, to użyj dragonfly w operze, lub firebug w Fx.
fenix.robi
Cytat(!*! @ 29.01.2013, 11:17:34 ) *
Ajax. A jak chcesz dokładnie wiedzieć jak to działa, to użyj dragonfly w operze, lub firebug w Fx.


Tak jak napisałeś w poprzednim poście porpzez XMLHttpRequest, nie można pobierać zawartości z innych domen, z przyczyn bezpieczeństwa. Szukam rozwiązania podobnego do FB / G+ lecz oni mają własne rozwiązanie zastępujące iframe
!*!
Zauważ że nawet źródła z iframe nie pobierzesz. Jedyne rozwiązanie to połączenie się z serwerem o którym pisałem, skoro na serwerze B masz możliwość użycia PHP, to z nim się połącz z serwera A.
pluskwa
  1. $curl = curl_init();
  2. //Inicujemy curl
  3.  
  4. curl_setopt($curl, CURLOPT_URL, 'http://www.strona.pl');
  5. //pobieramy dane z "http://www.strona.pl"
  6.  
  7. curl_setopt($curl, CURLOPT_REFERER, "http://www.google.pl/");
  8. //ustawiamy refferer na www.google.pl (niektóre strony mają zabezpieczenia
  9.  
  10. curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
  11. //podążamy za ewentualnym przekierowaniem
  12.  
  13. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  14. //wyniku nie wyświetlamy a zapisujemy do zmiennej co ułatwia prace nad nim
  15.  
  16. curl_setopt($curl, CURLOPT_USERAGENT, 'Googlebot/2.1 (+http://www.googlebot.com/bot.html)');
  17. //ustawiamy useragent (niektóre strony mają zabezpieczenia)
  18.  
  19. curl_setopt($curl, CURLOPT_TIMEOUT, 30);
  20. //Maxymalny czas połączenia ze stroną
  21.  
  22. curl_setopt($curl, CURLOPT_HEADER, 0);
  23. //nie chcemy dołączać nagłówka
  24.  
  25. $strona = curl_exec($curl);
  26. //uruchamiamy skonfigurowanego curla
  27.  
  28. curl_close($curl);
  29. //zamykamy


Może to pomoże smile.gif Teraz mamy pobraną stronkę w $strona
fenix.robi
Dzięki, ale znam cURLa, ja chcem zrobić dokładnie to samo co ten LIKE BOX , czyli przyszykowaną przezemnie stronę (element), udostępnić innym stronom, na zasadzie dodania widgetu o zdefiniowanych wymiarach.

Cieszę się ze jest zainteresowanie tym tematem, lecz zdziwiłem się że nie ma w googlu dokładnych rozwiązań, jak myśle na taki prosty problem. Szukam dalej
!*!
Cytat(fenix.robi @ 29.01.2013, 11:50:37 ) *
Cieszę się ze jest zainteresowanie tym tematem, lecz zdziwiłem się że nie ma w googlu dokładnych rozwiązań, jak myśle na taki prosty problem. Szukam dalej


Szukasz czegoś, co nie istnieje. Tracisz tylko czas.

@pluskwa 10 linijek kodu, zamiast jednej? Curl służy do czego innego niż pobieranie źródła (to że to umożliwia nie znaczy że jest to słuszne).
fenix.robi
Z dedykacją dla:

Cytat(!*! @ 29.01.2013, 11:54:28 ) *
Szukasz czegoś, co nie istnieje. Tracisz tylko czas.


Podstawowe użycie:

Kod
//Po stronie klienta - domena B
<div id="myBox"></div>
<script>
    function doSomething(html) {
        document.getElementById("myBox").innerHTML = html;
    }
    var jsonp = document.createElement('script');
    jsonp.src = 'http://mySecondPage.com/jsonp.php';
    document.body.appendChild(jsonp);
</script>

//po stronie serwera - domena A - plik jsonp.php
<?php
$file = file_get_contents('widget.html');
echo "doSomething('" . str_replace(array("\r", "\n"), array("", ""), $file) . "');";
?>


pomocne linki: JSONP #1, JSONP #2

Oczywiscie to podstawowe użycie, zamiast wysyłać HTML to można zdefiniować tablice z niej json_encode, + odbierać eval i mieć to w jsonie, ja potrzebowałem wysyłać HTML, teraz przerabiam przykład dla moich potrzeb.
Nie wykorzystuję tu nic z HTML5, ale moje założenia zostały spełnione.


BTW:
Cytat(!*!) *
Połącz się przez ajax do php > return file_get_contents() "
Nie chodzi o to ze wykorzytałem file_get_contents(), tylko ze jak miałem się połaczyć z domeny B (nie uzywając żadnych skryptów PHP etc.) do domeny A (tu mogłem wykorzystać PHP) za pomocą ajaxa w tym przypadku nic nie zdziałam

Pozdrawiam
!*!
Sprecyzuj na przyszłość o co Ci chodzi a unikniemy nieporozumienia.
Crozin
Rozwiązanie działające wyłącznie po stronie klienta wymagać będzie skorzystania z Cross-origin resource sharing i jest jak najbardziej możliwe. Jest ono lepsze, jeżeli tylko możemy pozwolić sobie na brak wsparcia ze strony starszych przeglądarek.
Tymon34
Cytat(Crozin @ 29.01.2013, 16:18:20 ) *
Rozwiązanie działające wyłącznie po stronie klienta wymagać będzie skorzystania z Cross-origin resource sharing i jest jak najbardziej możliwe. Jest ono lepsze, jeżeli tylko możemy pozwolić sobie na brak wsparcia ze strony starszych przeglądarek.

Niestety w Polsce mamy jeszcze wielu użytkowników... Internet Explorer 6, nie wspominając o 7 i w wielu przypadkach nieaktualizowanym firefoxie. Znam to z doświadczenia, a prowadzę serwis komputerowy...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.