webForumDet fria alternativet

Att byta ut innehållet i en sida - live

JavaScript

26 svar · 2 058 visningar · startad av haider

Medlem sedan jan. 2003956 inlägg
Frågan#1

OK, det här är inte så dramatiskt som det låter.

För längesen trixade jag med document.write å sånt.
Jag har för mig att man kan rensa dokumentets innehåll och ersätta det med nåt annat med document.write.

Går det?
Jag tänkte att man ersätter det med ett frameset.
Men sen krävs ju även att framesettet blir aktivt så att säga, ungefär som när man gör en refresh.

Orsaken är att jag vill undvika location=bla_bla och därmed orsaka att folk inte kan backa i IE.

Eller kanske någon har ett annat förslag?

Medlem sedan aug. 20039 340 inlägg
#2

Vill du hindra användaren från att gå bakåt, eller vill du att användaren ska kunna det?
Om det är det senare du vill tycker jag att du ska ta en titt på location.replace.
Så här går det till: Tänk dig att du har tre sidor, 1.html, 2.html och 3.html. 1.html innehåller en länk till 2.html, men du vill att 2.html ska redirecta till 3.html, men att användaren ändå ska hamna på 1.html när hon klickar på bakåt-knappen. Om 2.html innehåller följande kod så blir det just så.

<script type="text/javascript"><!--
location.replace("3.html");
--></script>
Medlem sedan jan. 2003956 inlägg
#3

Bra jobbat

Hey Nitro, du är mannen med de tusen svaren

was?? Location.replace? Ingen har berättat om denna - får snabbt ta o kolla upp det, detta kan vara svaret på mina problem (några av dem dock :-) )
Tack ska du ha så länge!

Medlem sedan maj 2005562 inlägg
#4

det går med ex javascript o php att byta ut innehållet på sidan utan att den laddas om.. om det är nåt sånt du söker ..
kika ex på https://www.prisjakt.nu .. deras sökfunktion

http://susning.nu/AJAX
http://en.wikipedia.org/wiki/AJAX

Medlem sedan aug. 20039 340 inlägg
#5

Fast jag tror inte att det var ajax haider var ute efter i detta fall. I 50% av fallen verkar som folk som frågar egentligen behöver något annat än det de explicit frågar om.

Medlem sedan jan. 2003956 inlägg
#6

Hej igen

Kan jag skriva så?

... onclick="location.replace(target_page) ..

där target_page är en variabel

ja, ajax verkar coolt, men location.replace är specifikt det jag tänkte mig. Det jag körde med innan var location.href=target_page, men det leder till att man backar tillbaks till sidan som orsakade location.href och det blir knas av det hela.

Men jag får inte rätt på onlick meningen ovan, kanske är det nåt jag inte har försått?

Medlem sedan dec. 20025 483 inlägg
#7

Jodå, det skall väl fungera:

<a href="#" onclick="location.replace(target_page)">
<a href="javascript:location.replace(target_page)">
Medlem sedan jan. 2003956 inlägg
#8

OK

Går det att skriva om denna rad?
mainFrame.location.href=(location.search.length>1)?location.search.substring(1):"home.html";

En fråga angående "referrer". Är en referrer sidan som är före? Det är så att jag har en tracker, men den trackern har upphört att funka pga frame-eländet.
Jag tror att på grund av raden ovan, som jag kallar för "framefixer", så blir referrer (om det är så att jag har förstått det rätt, om vad en referrer är) sidan före. Därmed går trackern misste om google-info (från referrern) mm.

Om jag har förstått saken rätt, kommer location.replace att lösa det?

Medlem sedan jan. 2003956 inlägg
#9

förtydligande..

OK

Så här ligger det till.

location.replace har gjort tillvaron en hel del bekvämare; synd bara att jag inte känt till den här lilla finessen. Tack för tipset Nitro.

Däremot är mitt verkliga problem ett referrer-problem, utöver frame-problemet.
Jag använder en tracker som lagrar info taget från referrern.

Så jag intalade mig, att om jag lyckas ersätta sidans innehåll med något annat, och därmed "fortsätta befinna mig" i sidan strax efter sökmotorn, så kan jag därmed bibehålla referrer-datan.

Nu så tipsade Nitro mig om location.replace, och jag tänkte att detta var en enkel lösning. Rent fysiskt så backar man ju faktiskt tillbaks till sökmotorn (till exempel) och riskerar inte att fastna i mellanläget som löste frame problemet.

Men när jag gör tester med referrer, så verkar det inte ha löst sig.
Jag använder en PERL och JS lösning enligt följande:

if(top.location == self.location) { 

var dir = location.pathname.substring(1, location.pathname.lastIndexOf('/')+1);
var filename = location.pathname.substring(location.pathname.lastIndexOf('/')+1);
var FA = 'http://www.mediamania.se/cgi-bin/mm_link.cgi';
var FU = FA + '?url==/' + dir + filename;

location.replace(FU);

}

Det resulterar i att strängen i sökvägen ser ut på så vis:

https://www.mediamania.se/cgi-bin/?url==/en_sida.html

Inne i en_sida.html skapade jag en kontroll för referrern i form av en alert. Trots att jag kommer från en annan sida, så visar den "www.mediamania.se/cgi-bin/?url==/en_sida.html" som referrer.

På nåt sätt "fastnar" den där.

Något förslag?

Medlem sedan aug. 20039 340 inlägg
#10

Du vill alltså spara orginalreferern för ditt tracking-script? Pröva detta:

if(top.location == self.location) { 

var dir = location.pathname.substring(1, location.pathname.lastIndexOf('/')+1);
var filename = location.pathname.substring(location.pathname.lastIndexOf('/')+1);
[b]var ref = escape(document.referrer);[/b]
var FA = 'http://www.mediamania.se/cgi-bin/mm_link.cgi';
var FU = FA + '?url==/' + dir + filename[b] + "&referrer=" + ref[/b];

location.replace(FU);

}

Sedan får du plocka referrer=... ur querystringen och använda istället för referrer om det existerar. För detta ändamål kan du använda mitt parseQuery-skript: http://www2.hemsida.net/dtd/page2/parsequery.js
Och sedan får du byta ut följande i tracking-skriptet:

var blabla=document.referrer;
// till
  var qs = parseQuery();
  if(qs["referrer"])
   blabla = qs["referrer"];
  else
   blabla = document.referrer;

Eller något i den stilen...

Medlem sedan jan. 2003956 inlägg
#11

Wow, Nitro, du har verkligen en toppen-lösning.

Grejen är dock att jag inte gjort trackinglösningen själv, utan som det ser ut nu har jag denna kod för att utläsa skicka data till tracking-scriptet.

<script type="text/javascript" language="JavaScript1.2">
	<!--
	EXs=screen;EXw=EXs.width;navigator.appName!="Netscape"?
	EXb=EXs.colorDepth:EXb=EXs.pixelDepth;//-->
	
	</script>
	<script language="" type="text/javascript">
	<!--
	navigator.javaEnabled()==1?EXjv="y":EXjv="n";
	EXd=document;EXw?"":EXw="na";EXb?"":EXb="na";
	EXd.write("<img src=http://nht-2.extreme-dm.com",
	"/n2.g?login=mediaman&amp;pid=index&amp;",
	"jv="+EXjv+"&amp;j=y&amp;srw="+EXw+"&amp;srb="+EXb+"&amp;",
	"l="+escape(EXd.[B]referrer[/B])+" height=1 width=1>");//-->
	
	</script>
	<noscript><img height="1" width="1" alt=""
	src="http://nht-2.extreme-dm.com/n2.g?login=mediaman&amp;pid=index&amp;j=n&amp;jv=n"/>
	</noscript>

Det tycks nämnas en "referrer" där uppe.
För mig tycks det vara lite invecklat, jag kan se att scriptet skriver en slags img-tag där det någonstans kläms in en referrer? Jag ser inte något som känns logiskt för mig där denna referrer läses av tracking-servern, men det måste den nog göra på nåt sätt.

Isåfall, så kanske det går att baka in ditt script i systemet?
Ge mig så mycket feedback som du kan, så kan jag sammanfatta all information och göra ett försök. I värsta fall försöker jag ta hjälp av företaget bakom trackern.

Men tack ska du ha så här långt, jag är inget än imponerad på ditt script. Trots att jag ställde min senaste fråga trodde jag faktiskt att referrern kunde ha gått förlorad.
Jag ska göra tester dock - för jag är rätt nyfiken över hur adressraden kommer att se ut med hela referrern i URLen :e

Medlem sedan jan. 2003956 inlägg
#12

Dämn, jag testade det precis, och det var rätt coolt, att den faktiskt flyttade med sig referrern.

Problemet tycks vara cgi-scriptet, som inte klarar att separera sidans URL från informationen som finns fr.o.m &referrer.
Kan du CGI?
En tanke jag fick var, om det går att dölja den långa raden, tex genom att flytta referrer-informationen till CGI, som sen lassar över informationen till en sträng.. Hmm, men hur skulle javascript kunna utläsa datan som är dold som en CGI variabel?
Glöm det.

Dock kvarstår - även om detta inte är en CGI tråd - om hur man löser problemet med CGI-scriptet? Nitro, kan du perl? Annars får jag lägga upp en fråga på cgi-forumet, för Jojoxx är där o härjar för min skull - han är schysst den grabben helt enkelt.

Medlem sedan aug. 20039 340 inlägg
#13

Fråga: Ska det vara dubbelt =-tecken efter url? Finns det någon särskild mening med det? Jag är inte riktigt säker på vad du menar att cgi-skriptet inte kan separera... En tanke är att sidan som generar adressen till location.replace själv har querystrings, som grötar ihop sig. Sådant löses enkelt med escape. Pröva koden nedan.

if(top == self) { 

var FA = 'http://www.mediamania.se/cgi-bin/mm_link.cgi';
var FU = FA + '?url=' + escape(location.href.replace(/http:\/\/[^/]*,"")) + 
    "&referrer=" + escape(document.referrer);

location.replace(FU);

}

Jag vet inte om du har listat ut det, annars följer lösningen till extreme tracking's kod här:

<script type="text/javascript" language="JavaScript1.2">
	<!--
	EXs=screen;EXw=EXs.width;navigator.appName!="Netscape"?
	EXb=EXs.colorDepth:EXb=EXs.pixelDepth;//-->
	
	</script>
	<script language="" type="text/javascript">
	<!--
var blabla=document.referrer;
  var qs = parseQuery(),blabla;
  if(qs["referrer"])
   blabla = qs["referrer"];
  else
   blabla = document.referrer;

	navigator.javaEnabled()==1?EXjv="y":EXjv="n";
	EXd=document;EXw?"":EXw="na";EXb?"":EXb="na";
	EXd.write("<img src=http://nht-2.extreme-dm.com",
	"/n2.g?login=mediaman&amp;pid=index&amp;",
	"jv="+EXjv+"&amp;j=y&amp;srw="+EXw+"&amp;srb="+EXb+"&amp;",
	"l="+escape(blabla)+" height=1 width=1>");//-->
	
	</script>
	<noscript><img height="1" width="1" alt=""
	src="http://nht-2.extreme-dm.com/n2.g?login=mediaman&amp;pid=index&amp;j=n&amp;jv=n"/>
	</noscript>
Medlem sedan apr. 20031 660 inlägg
#14

HEJ!

haider skrev:

...
EXd.write("<img src=http://nht-2.extreme-dm.com",
"/n2.g?login=mediaman&amp;pid=index&amp;",
"jv="+EXjv+"&amp;j=y&amp;srw="+EXw+"&amp;srb="+EXb+"&amp;",
"l="+escape(EXd.[B]referrer[/B])+" height=1 width=1>");
...

...
Det tycks nämnas en "referrer" där uppe.
För mig tycks det vara lite invecklat, jag kan se att scriptet skriver en slags img-tag där det någonstans kläms in en referrer? Jag ser inte något som känns logiskt för mig där denna referrer läses av tracking-servern, men det måste den nog göra på nåt sätt.
...

Det som kodsnutten ovan gör, hoppas jag, är att den skapar en "bild" som finns på deras server. När någon besöker din sida, skrivs en rad i deras loggfiler med url inklusive querystring.
Loggfilerna bearbetas sedan på vanligt loggfilshanteringsvis, fast med deras specialprogram för att ta hand om extravariablerna, och blir statistik för dig.

Detta är ett vanligt sätt att göra statistik över nyhetsbrev; när brevet öppnas, skrivs en loggfilsrad.

Gillar man skicka spam, hänger man på data så man ser vilken epostadress det är som läser, och får då reda på att adressen fungerar! :(
Det är därför man överhuvudtaget inte ska ens öppna epost man inte känns vid.
Alternativt ta visa källa, kopiera url:en, ändra parametrarna, och klistra in i webbläsaren.

Medlem sedan aug. 20039 340 inlägg
#15

J.N. skrev:

Gillar man skicka spam, hänger man på data så man ser vilken epostadress det är som läser, och får då reda på att adressen fungerar! :(
Det är därför man överhuvudtaget inte ska ens öppna epost man inte känns vid.
Alternativt ta visa källa, kopiera url:en, ändra parametrarna, och klistra in i webbläsaren.

Lite OT, men gmail gör by default så att mail med externa bilder visas utan att bilderna laddas. Ännu ett skäl att välja gmail!

Medlem sedan jan. 2003956 inlägg
#16

JN: detta med spam skrämde mig just. Många kör ju "opt-out" via länkar. Då menar du att denna optouten lika gärna kan vara ett nytt register om vilka som aktivt läser sin mail?

Medlem sedan aug. 20039 340 inlägg
#17

haider skrev:

JN: detta med spam skrämde mig just. Många kör ju "opt-out" via länkar. Då menar du att denna optouten lika gärna kan vara ett nytt register om vilka som aktivt läser sin mail?

Kan inte vara, det är det!

Medlem sedan apr. 20031 660 inlägg
#18

HEJ!

Nja, avanmälansklick kan ju inte användas för att räkna de som läst brevet; de behöver ju inte läsa innehållet.

När de avanmäler sig spar man datum/ip/http_host/etc på lämpligt sätt, så har man ett register över när avregistreringar sker. Det är nästan lika viktigt som att veta när prenumeranter anmäler sig.

Medlem sedan aug. 20039 340 inlägg
#19

J.N. skrev:

Nja, avanmälansklick kan ju inte användas för att räkna de som läst brevet; de behöver ju inte läsa innehållet.

De som sänder spam köper listor med e-post-adresser, och får vara glada om någon fungerar. Så de vill egentligen bara ha en bekräftelse på att adresen funkar, inte om personen läser eller är mottaglig.

Medlem sedan jan. 2003956 inlägg
#20

nitro2k01 skrev:

Fråga: Ska det vara dubbelt =-tecken efter url? Finns det någon särskild mening med det? Jag är inte riktigt säker på vad du menar att cgi-skriptet inte kan separera... En tanke är att sidan som generar adressen till location.replace själv har querystrings, som grötar ihop sig. Sådant löses enkelt med escape. Pröva koden nedan.

Nitro-dude, jag är inte helt säker på att escape behövs (kan ju testa sen igen). Angående dubbelt =, så är jag inte jättebra på CGI, men jag tror att man kan ändra något där för att endast köra med ett.
Nu är detta ett JS forum, men jag har nedanstående bara som referens:

($name, $value) = split(/==/, $query);

Troligen räcker det med att ha ett = tecken - ska testa idag.

Men det verkliga problemet är det som jag beskrev som "cgi-skriptet kan inte separera".
När jag går in i sidan så ser URLen ut så:

www.domän.se/cgi-bin/link.cgi?url==/sidan.html
Med ditt tillägg ser det ut så:

www.domän.se/cgi-bin/link.cgi?url==/sidan.html&referrer=http%3A//www.google.se/se...

CGi scriptet tar alltså med hela paketet efter "sidan.html", alltså &referrer och rubbet, vilket tycks störa.

Dessutom tycks ..

var FU = FA + '?url=' + escape(location.href.replace(/http:\/\/[^/]*,"")) + "&referrer=" + escape(document.referrer);

.. inte ge nåt resultat. Är det nån felstavning som smygit sig in? Jag har lite svårt för att förstå alla slashar :r

277 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
148 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)