[Javascript] Detect Privacy settings IE6 (cookies)

Pagina: 1
Acties:

  • getfirefoxnow
  • Registratie: Mei 2005
  • Niet online
Ik heb een javascript gemaakt die de resolutie detecteert en vervolgens wegschrijft naar een cookie. Vervolgens lees ik in PHP de cookie uit en bouw ik de website op.

Enig probleem waar ik tegen aan loop is dat ik in IE6 "privacy settings = high" niet kan detecteren. Bij privacy high setting accepteert IE6 namelijk mijn cookie niet. Ik kan wel detecteren of privacy settings op "block all cookies" staat. Dit doe ik met "if (window.navigator.cookieEnabled)".

Er zijn twee mogelijke oplossingen:
(1) Ik moet kunnen detecteren of "privacy settings = high" aan staat.
(2) Ik moet het voor elkaar krijgen dat bij "privacy settings = high" ook mijn cookie wordt geaccepteerd.

Geen oplossing is:
- Een test cookie plaatsen en vervolgens via de URL meegeven of het gelukt is. De URL
wordt nl. al gebruikt door phpwcms waar ik gebruik van maak.
- Een global var gebruiken en die uitlezen om te checken of het cookie script al is
doorlopen. Mijn provider accepteert geen global vars.

Ik zie dat GOT ook geen rekening heeft gehouden met "privacy settings = high", als ik
namelijk met "privacy settings = high" inlog blijft ie hangen. Met alle andere
settings gaat het wel goed.

Voor de volledigheid mijn javascript:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<script language="javascript">
// Dit javascript bepaalt de huidige schermresolutie en schrijft dit weg naar een 
cookie
<!--
//Bepaal browser type en versie
var browsername = (navigator.appName);
var ieversion = (navigator.userAgent.toLowerCase())
var ieversion6 = ((navigator.userAgent.toLowerCase()).indexOf("msie 6"));
var ieversion7 = ((navigator.userAgent.toLowerCase()).indexOf("msie 7"));

// Indien moderne browser, bepaal dan de resolutie (anders altijd op 800x600 

weergeven)
if (((browsername == "Microsoft Internet Explorer" && ieversion6 == "25") || 

(browsername == "Microsoft Internet Explorer" && ieversion7 == "25")) || (browsername 

!= "Microsoft Internet Explorer")) {
// Indien cookies ingeschakeld, bepaal dan de resolutie (anders altijd op 800x600 

weergeven)
if (window.navigator.cookieEnabled) { // Indien cookies enabled: Plaats hieronder het 

cookie
var resolutie = readCookie('users_resolution');
if (resolutie) // Indien cookie al bestaat: ga na of resolutie is veranderd
{
    if (screen.width != resolutie) // Indien resolutie is veranderd: nieuwe 

cookie aanmaken
    {
        writeCookie();
    }
}
else // Indien cookie niet meer bestaat: nieuwe cookie aanmaken
{
    writeCookie();
}
}
else // Indien cookies niet enabled: geef alert
{
//  alert ("Voor een optimaal resultaat dient u cookies in te schakelen");
}
}

// Hieronder staan alle functions die nodig zijn om resolutie-cookie aan te maken
function eraseCookie(name)
{
    document.write ('erase');
    createCookie(name,"",-1);
}

function readCookie(name)
{
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++)
    {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return 

c.substring(nameEQ.length,c.length);
    }
    return null;
}

function createCookie(name,value,days)
{
    if (days)
    {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
}

function writeCookie()
{
 var today = new Date();
 today.setTime(today.getTime()+(999*999*1000));
// var the_date = today;
 var the_date = new Date("December 31, 2199");
 var the_cookie_date = the_date.toGMTString();
 var the_cookie = "users_resolution="+screen.width;
// var the_cookie = "users_resolution="+ screen.width +"x"+ screen.height;
 var the_cookie = the_cookie + ";expires=" + the_cookie_date;
 document.cookie=the_cookie;

 location = '<?$_SERVER['REQUEST_URI']?>';
}
//-->
</script>

[ Voor 7% gewijzigd door getfirefoxnow op 05-07-2005 16:30 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 09:19

crisp

Devver

Pixelated

Als je geen cookies accepteerd dan kan je hier inderdaad niet inloggen, en op zich is dat niet vreemd natuurlijk ;)
IE met security op 'high' is een praktisch onbruikbare webbrowser op het hedendaagse internet; je kan dan beter kiezen voor een alternatieve browser met een beter security-record ;)

Een alternatief voor het doorgeven van variabelen is iets dergelijks:
JavaScript:
1
2
var detect = new Image();
detect.src = 'detectscript.php?w=' + screen.width + '&h=' + screen.height;

je detectscript.php kan dan de boel verwerken en uiteindelijk een klein plaatje (bijvoorbeeld een 1x1 pixel gifje) teruggeven. Je hebt dan niets te maken met cookie-support (wel met javascript support uiteraard, maar daar ontkom je niet aan).

Edit: je browsercheck deugt niet (en is ook overbodig); wel eens verschillende userAgent strings bekeken? er is geen enkele garantie dat 'MSIE X' op een bepaalde positie staat. Verder is je script natuurlijk IE-only wat sowieso hedentendage niet echt praktisch is... (IE een moderne browser? yeah right... :P )

[ Voor 21% gewijzigd door crisp op 05-07-2005 16:40 ]

Intentionally left blank


  • André
  • Registratie: Maart 2002
  • Laatst online: 04-05 16:01

André

Analytics dude

Is het misschien ook een mogelijkheid om je site zo te maken dat hij niet resolutieafhankelijk is?

En je kunt in php toch checken of een cookie bestaat, zo niet dan een algemene pagina voorschotelen?

  • getfirefoxnow
  • Registratie: Mei 2005
  • Niet online
crisp schreef op dinsdag 05 juli 2005 @ 16:35:
Een alternatief voor het doorgeven van variabelen is iets dergelijks:
JavaScript:
1
2
var detect = new Image();
detect.src = 'detectscript.php?w=' + screen.width + '&h=' + screen.height;

je detectscript.php kan dan de boel verwerken en uiteindelijk een klein plaatje (bijvoorbeeld een 1x1 pixel gifje) teruggeven. Je hebt dan niets te maken met cookie-support (wel met javascript support uiteraard, maar daar ontkom je niet aan).

Verder is je script natuurlijk IE-only wat sowieso hedentendage niet echt praktisch is... (IE een moderne browser? yeah right... :P )
Mijn script IE-only? hoe bedoel je dit? Ik heb wel degelijk met non-IE browsers rekening gehouden.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 09:19

crisp

Devver

Pixelated

getfirefoxnow schreef op dinsdag 05 juli 2005 @ 16:57:
[...]

Mijn script IE-only? hoe bedoel je dit? Ik heb wel degelijk met non-IE browsers rekening gehouden.
Ja, je voert het script alleen uit als IE gedetecteerd is - dan is het toch IE-only? ;)

Intentionally left blank


  • getfirefoxnow
  • Registratie: Mei 2005
  • Niet online
crisp schreef op dinsdag 05 juli 2005 @ 18:39:
[...]

Ja, je voert het script alleen uit als IE gedetecteerd is - dan is het toch IE-only? ;)
JavaScript:
1
if (((browsername == "Microsoft Internet Explorer" && ieversion6 != "-1") || (browsername == "Microsoft Internet Explorer" && ieversion7 != "-1")) || (browsername != "Microsoft Internet Explorer")) {


Hier staat:
Indien (browser=IE6 of browser=IE7) of browser<>IE {
voer script uit
}

Indien browser<>IE: dus Netscape, Opera, e.d.

Ik heb eea getest met Firefox 1.0.4 en het werkt prima.

By the way, ik heb van:
ieversion6 == "25"
dit gemaakt:
ieversion6 != "-1"
Nu is ie niet meer afhankelijk van de positie.

[ Voor 9% gewijzigd door getfirefoxnow op 07-07-2005 11:50 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 09:19

crisp

Devver

Pixelated

mmz, die laatste vergelijking had ik niet gezien (ook niet zo gek met je indenting ;) ), maar waarom is die browsercheck dan ueberhaupt nog nodig? Waarom sluit je bijvoorbeeld IE 5 uit?
En waarom een cookie gebruiken als het ook anders kan (zie mijn eerdere reply)?

Intentionally left blank


  • getfirefoxnow
  • Registratie: Mei 2005
  • Niet online
crisp schreef op dinsdag 05 juli 2005 @ 18:55:
mmz, die laatste vergelijking had ik niet gezien (ook niet zo gek met je indenting ;) ), maar waarom is die browsercheck dan ueberhaupt nog nodig? Waarom sluit je bijvoorbeeld IE 5 uit?
En waarom een cookie gebruiken als het ook anders kan (zie mijn eerdere reply)?
(1) Omdat je ook nog IE3 en IE4 hebt.

(2) Het heeft me redelijk wat tijd gekost (ik heb weinig js ervaring) om dit cookie script te schrijven.
Ik moet me nu dus helemaal opnieuw gaan verdiepen in de oplossing die jij aandraagt. Wordt ergens op internet jouw oplossing nog toegelicht?

Verwijderd

Een goede test is met bijvoorbeeld een PHP script een cookie setten, en een redirect header meesturen.

<php
setcookie ( 'test', '123', time () + 3600, '/' );
header ( 'Location: http://www.domein.com/cookietest.php' );
?>

Als dat 2e script (cookietest.php) geen cookie ontvangt, accepteert de gebruiker geen cookies. Als je het meteen goed wilt doen detecteer je ook of session cookies wel geaccepteerd worden.

Maar als je per se clientside wilt checken, kun je dit uiteraard niet gebruiken.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 09:19

crisp

Devver

Pixelated

getfirefoxnow schreef op dinsdag 05 juli 2005 @ 20:05:
[...]


(1) Omdat je ook nog IE3 en IE4 hebt.
Geen hond die die browsers nog gebruikt, maar volgens mij kan je in IE4 ook gewoon via JS een cookie zetten ;)
(2) Het heeft me redelijk wat tijd gekost (ik heb weinig js ervaring) om dit cookie script te schrijven.
Ik moet me nu dus helemaal opnieuw gaan verdiepen in de oplossing die jij aandraagt. Wordt ergens op internet jouw oplossing nog toegelicht?
Zo moeilijk is mijn alternatief toch niet? Hoewel ik me net bedenk dat om iets te kunnen doen met de gegevens je toch een cookie nodig zal hebben :X - als het alleen maar om statistieken ging was het een ander verhaal.

On the other hand vraag ik me af of je je wel zo druk moet maken om gebruikers die geen cookies accepteren - dat zal sowieso een minderheid zijn. Sommige mensen hebben javascript ook uitstaan in hun browser, en dan werkt je code al helemaal niet. Als je site maar gewoon goed werkt in die gevallen is er niets aan de hand...

[ Voor 12% gewijzigd door crisp op 05-07-2005 23:01 ]

Intentionally left blank

Pagina: 1