ďťż

[JS] Problem ze skryptem pobierającym źródło strony skrypt pobierający źródło strony

       

Podstrony


telcocafe

Witam! Jesli chodzi o skrypty to jestem poczatkujacy, jeszcze niedawno nie zanlem nawet HTML'a ale robie duze postepy dlatego prosze o wyrozumialosc.
Ale do rzeczy:
Potrzebuje zrobic skrypt koniecznie w JS !!! ktory pobierze zrodlo strony(wraz ze znacznikami) i skopiuje jego fragment do schowka systemowego. stworzylem cos takiego:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Pobieracz</title> <script> var str = 'abcdefghijklmnopres'; var str2 = str.substring(4, 10); // wycina fragment stringu (alfabetu) ale jak zrobic aby wycinalo fragment zrodla strony ?? var ObiektXMLHttp = false; if (window.XMLHttpRequest) { ObiektXMLHttp = new XMLHttpRequest(); } else if (window.ActiveXObject) { ObiektXMLHttp = new ActiveXObject("Microsoft.XMLHTTP"); } function getMsg(src, content) { if(ObiektXMLHttp) { ObiektXMLHttp.open("GET", src); ObiektXMLHttp.onreadystatechange = function() { if (ObiektXMLHttp.readyState == 4) { document.getElementById(content).innerHTML = ObiektXMLHttp.responseText; } } ObiektXMLHttp.send(null); } } function ClipBoard() { holdtext.innerText = copytext.innerText; Copied = holdtext.createTextRange(); Copied.execCommand("Copy"); } </script> </head> <body> <center> <div id="a1"></div> <a href="#" onclick="getMsg('http://www.gazeta.pl', 'copytext')">pobierz zrodlo strony</a> <br><br> <SPAN ID="copytext" STYLE="height:150;width:162;background-color:darkorange"> Tu wkleji sie zrodlo po nacisnieciu linku </SPAN> <br><br> <TEXTAREA ID="holdtext" rows="10" cols="60"> moze tutaj da sie pobrac zrodlo ze znacznikami ??? </TEXTAREA> <br><br> <BUTTON onclick="ClipBoard();">kopiuj do schowka</BUTTON> </center> </body> </html>

i teraz tak:

1. funkcja kopiowanie do schowka dziala:) wiec to jest OK

2. Wyswietla mi tylko tekstowa zawartosc strony (czyli ta widoczna na stronie) a ja chce aby bylo to kompletne zrodlo ( wraz ze znacznikami )
i tu moje pytanie: Jak zrobic aby mozna bylo pozniej skopiowac do schowka kompletne zrodlo ????? a nie tylko czesc widoczna jak to skrypt robi teraz.

3. Na wycinanie fragmentu mam pomysl taki : wrzucenie zrodla do stringu i wyciecie fragmentu stringu - czy pomysl dobry i czy realny nie wiem, dlatego pytam czy tak sie da??? a jesli nie to jak wyciac fragmrnt zrodla???

prosze nie odsylac mnie do dr google bo juz sporo czau mu poswiecilem ale rozwiazania tego problemu nie znalazlem,

dotarlem tylko do :

http://www.java2s.co...tURLContent.htm
http://www.java2s.co...GetURLParts.htm
http://www.java2s.co...eadfromaURL.htm
http://www.java2s.co...ocol/URLGet.htm
http://www.java2s.co...partsofaurl.htm

Ale zastanawiam sie czy to nie sa skrytpt JAVA a nie javascript...

ale biorac pod uwage moje doswiadczenie to nawet nie umiem uruchomic tych skryptow:(

wiec bylbym wdzieczny za pomoc w :
1 Jak pobrac zrodlo ze znacznikami??
2. jak pozniej z niego wyciac fragment??
3. ew jak uruchomic skrypty z linkow??

Z gory dzieki za pomoc na jakiekolwiek z pytan



Wygląda na to, że kod HTML się wykonuje. Zatem musisz zamienić < i > na encje. Być może istnieją lepsze sposoby, ale skorzystaj z fragmentu, który wykorzystuję przy dynamicznym podglądzie BBCode:text = text.replace(/&/g, '&amp;'); text = text.replace(/</g, '&lt;'); text = text.replace(/>/g, '&gt;');Za zmienną text możesz podstawić ObiektXMLHttp.responseText

Kod wykonujesz już po pobraniu kodu, ale zanim go wkleisz w odpowiednie miejsce.

Sprawdź, czy kopiowanie do schowka działa w innej przeglądarce niż IE.

Juz rozumiem Twoj pomysl, zmienic znaczniki tak zeby przegladarka mogla je wyswietlic :) GENIALNE! z tej strony nie patrzylem. A mozesz mi jeszcze powiedziec w ktorym miejscu to dokladnie wklejic ??? testuje wszedzie w sekcji SCRIPT ale jakos mi dzialac nie chce, wklejam cos takiego
ObiektXMLHttp.responseText = text.replace(/&/g, '&amp;'); ObiektXMLHttp.responseText = text.replace(/</g, '&lt;'); ObiektXMLHttp.responseText = text.replace(/>/g, '&gt;');

ale dalej mi pokazuje tylko tresc strony, gdzie to wklejic ????
Jak mi pomozesz zmienic te znaczniki na encje i powiesz jak z tego wyciac fragment?? np od 5 linijki zrodla do 40 linijki i to bedzie dzialac to poprosze o Twoj nr konta i wysylam Ci rownowartosc flaszki :D

Znajdź linię, w której wstawiasz kod do obiektu <span>. Wstaw przed nią:ObiektXMLHttp.responseText = ObiektXMLHttp.responseText.replace(/&/g, '&amp;'); ObiektXMLHttp.responseText = ObiektXMLHttp.responseText.replace(/</g, '&lt;'); ObiektXMLHttp.responseText = ObiektXMLHttp.responseText.replace(/>/g, '&gt;');Jeśli chcesz zaoszczędzić miejsca, spróbuj:var text = ObiektXMLHttp.responseText; text = text.replace(/&/g, '&amp;'); text = text.replace(/</g, '&lt;'); text = text.replace(/>/g, '&gt;'); //Natomiast zastąp linię wklejającą kod document.getElementById(content).innerHTML = text;Mam nadzieję, że rozumiesz ideę. Jeżeli sam pisałeś skrypt, poradzisz sobie w 3 minuty.

Dam ci kod na cięcie linii://Wykrywamy znak końca linii - pomijam \r, ale możesz rozszerzyć kod var NL = text.indexOf('\r\n')==-1) ? '\n' : '\r\n'; //Dzielimy - to może potrwać var lines = text.split(NL); //Maksymalna linia var max = Math.min(lines.length, 40); //Tablica, do której zapiszemy interesujące nas linie var nowe = []; //Zaczynamy na 5 (4) i kończymy na max (max-1) for(var i=0; i<max; i++) { nowe.push(lines[i]); } //Teraz masz, co chcesz text = nowe.join(NL);
Użytkownik Ferrari edytował ten post 21 luty 2010, 00:16


Wykorzystalem znalezioną funkcje getMsg, cala reszte napisalem sam. Dziwne juz sam zglupialem : jesli wkleję ObiektXMLHttp.responseText = ObiektXMLHttp.responseText.replace(/&/g, '&amp;'); ObiektXMLHttp.responseText = ObiektXMLHttp.responseText.replace(/</g, '&lt;'); ObiektXMLHttp.responseText = ObiektXMLHttp.responseText.replace(/>/g, '&gt;');
przed linię :
document.getElementById(content).innerHTML = ObiektXMLHttp.responseText;
to wtedy skrypt mi nie dziala( po kliknieciu w link nic sie nie wykonuje). A jesli wkleje gdziekolwiek po tej linii to pozostaje tak jak mialem poczatkowo (czyli wyswietla tresc bez znacznikow)
Moj kod wyglada teraz tak:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Pobieracz</title> <script> var ObiektXMLHttp = false; if (window.XMLHttpRequest) { ObiektXMLHttp = new XMLHttpRequest(); } else if (window.ActiveXObject) { ObiektXMLHttp = new ActiveXObject("Microsoft.XMLHTTP"); } function getMsg(src, content) { if(ObiektXMLHttp) { ObiektXMLHttp.open("GET", src); ObiektXMLHttp.onreadystatechange = function() { if (ObiektXMLHttp.readyState == 4) { document.getElementById(content).innerHTML = ObiektXMLHttp.responseText; ObiektXMLHttp.responseText = ObiektXMLHttp.responseText.replace(/&/g, '&amp;'); ObiektXMLHttp.responseText = ObiektXMLHttp.responseText.replace(/</g, '&lt;'); ObiektXMLHttp.responseText = ObiektXMLHttp.responseText.replace(/>/g, '&gt;'); } } ObiektXMLHttp.send(null); } } function ClipBoard() { holdtext.innerText = copytext.innerText; Copied = holdtext.createTextRange(); Copied.execCommand("Copy"); } ObiektXMLHttp.responseText = ObiektXMLHttp.responseText.replace(/&/g, '&amp;'); ObiektXMLHttp.responseText = ObiektXMLHttp.responseText.replace(/</g, '&lt;'); ObiektXMLHttp.responseText = ObiektXMLHttp.responseText.replace(/>/g, '&gt;'); </script> </head> <body> <center> <script> ObiektXMLHttp.responseText = ObiektXMLHttp.responseText.replace(/&/g, '&amp;'); ObiektXMLHttp.responseText = ObiektXMLHttp.responseText.replace(/</g, '&lt;'); ObiektXMLHttp.responseText = ObiektXMLHttp.responseText.replace(/>/g, '&gt;'); </script> <a href="#" onclick="getMsg('http://www.gazeta.pl', 'copytext')">pobierz zrodlo strony</a> <script> ObiektXMLHttp.responseText = ObiektXMLHttp.responseText.replace(/&/g, '&amp;'); ObiektXMLHttp.responseText = ObiektXMLHttp.responseText.replace(/</g, '&lt;'); ObiektXMLHttp.responseText = ObiektXMLHttp.responseText.replace(/>/g, '&gt;'); </script> <SPAN ID="copytext" STYLE="height:150;width:162;background-color:darkorange"> Tu wkleji sie zrodlo po nacisnieciu linku </SPAN> <br><br> <BUTTON onclick="ClipBoard();">kopiuj do schowka</BUTTON> </div> </center> </body> </html>
Przepraszam za taki balagan (chcialem pokazac, ze nigdzie ponizej ta zamiana nie daje efektow u mnie) ale wyswietla się dalej tylko tresc (bez znacznikow). Jak wkleje powyzej to nie wyswietla wtedy nic. Ggdzies mam blad ale o tej porze nie potrafie juz znalezc. Do testowania tego uzywam Internet Explorera może to ma znaczenie?? U Ciebie na jakiej przeglądarce to zadziałało???
Użytkownik marekxczarny edytował ten post 21 luty 2010, 02:48
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.