Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Identifiable Browser Windows

Îåêßíçóå áðü ôï ìÝëïò rousso. Τελευταία δημοσίευση από το μέλος rousso στις 10-08-2005, 12:07. Υπάρχουν 0 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  10-08-2005, 12:07 4153

    Identifiable Browser Windows

    Λοιπόν, ένα προβληματάκι που με είχε απασχολήσει κάποτε και τελικά ποτέ δεν έλυσα ήταν το εξής:

    Ήθελα (σε ASP.NET) στον server να ξέρω αν ο χρήστης της εφαρμογής μου είχε περισσότερα από ένα browser windows ανοικτά και από ποιό από αυτά ερχόταν κάθε request.

    Δεν μπαίνω τώρα σε λεπτομέρειες γιατί το ήθελα αυτό (και εξακολουθεί να είναι στο wish-list μου) αλλά ας πάρουμε τον IE ώς παράδειγμα:

    Έχεις ένα user με IE. Αν ο user ανοίξει άλλο ένα instance του IE από τα Windows και συνδεθεί στην ASP.NET εφαρμογή σου, τότε θα ανοίξει στην πραγματικότητα ένα δεύτερο session. Αυτό μπορείς να το "αντιληφθείς" με server-side κώδικα και να το διαχωρίσεις από τα άλλα sessions με το γνωστό τρόπο.

    Αν όμως πατήσει Ctrl+N (ή File/New/Widnow) τότε το ίδιο browser instance θα ανοίξει ένα δεύτερο (client-side) window το οποίο θα βλέπει την εφαρμογή σου παραμένοντας στο ίδιο ASP.NET session.

    Είχα κάνει κάποιες προσπάθειες στην κατεύθυνση του να το "αντιλαμβάνομαι" αυτό στο server-side κωδικά μου αλλά χωρίς μεγάλη επιτυχία. Η λογική ήταν ότι κάθε σελίδα της εφαρμογής έλεγχε με javascript το όνομα του window και αν δεν περιείχε ένα συγκεκριμένο (προκαθορισμένο) string θεωρούνταν "unregistered" στον server οπότε έκανε ένα postback που έπιανε ένας server-side handler και αφού κατέγραφε το νέο window του έδινε ένα όνομα για να το ξεχωρίζει από τα άλλα πάλι με javascript το οποίο έκανε inject στο response. Αυτό ναι μεν πρόσθετε ένα post-back αλλά μόνο την πρώτη φορά που εμφανιζόταν ένα νέο browser window στο παιχνίδι οπότε δεν έιχε ιδιαίτερο αντίκτυπο στον χρήστη και άρα ήταν αποδεκτό, (άσε που θα μπορούσε να γίνει και με XML-RPC και να μην το καταλάβει κανείς).

    Καλό ακούγεται έτσι όπως το λέω αλλά (χωρίς να θυμάμαι ακριβώς τον λόγο τώρα που γράφω) είχε κάποια θέματα και δεν μου διασφάλιζε ότι θα "έπιανα" όλα τα νεα windows ώστε να μπορώ να βασιστώ στο ότι τα "ξέρω" όλα και συμπεριφέρομαι ανάλογα στο καθένα. Οπότε και το εγκατέλειψα ημιτελές...

    Αυτό που έκανα τελικά ήταν να "απαιτώ" με javascript σε κάθε σελίδα, να τρέχει σε browser window με συγκεκριμένο όνομα, οπότε αν το όνομα του window δεν είναι το πρέπον, ανοίγω με javascript το ίδιο περιεχόμενο στο σωστό window και κάνω redirect το τρέχων σε ένα σχετικό μήνυμα προς τον χρήστη που του λέει πως συμπεριφέρεται η  εφαρμογή. Δηλαδή την πρώτη φορά φτιάχνεται το νέο window ενώ όλες τις επόμενες ανοίγει η σελίδα στο υπάρχον μοναδικό browser window με το σωστό όνομα. Το δε όνομα του window βασίζεται στο SessionId οπότε ο χρήστης μπορεί να έχει multiple windows ανοικτά σε διαφορετικές σελίδες της εφαρμογής αλλά κάθε ένα από αυτά εκπροσωπεί διαφορετικό server-side session. Δεν είναι και τόσο κομψή λύση αλλά ήταν η μόνη που προλάβαινα να υλοποιήσω τότε και η αλήθεια είναι ότι επειδή η εφαρμογή τρέχει σε intranet με συγκεκριμένους χρήστες ακόμα κι αυτό το απενεργοποίησα αφού δεν μου άρεσε ως λύση* (ξέρουν δηλαδή οι χρήστες ότι αν χρειαστούν δεύτερο παράθυρο ανοίγουν δεύτερο IE και όχι δεύτερο παράθυρο στον ήδη ανοικτό IE τους).

    Τώρα που κοίταζα όμως ξανά ένα σχετικό κομμάτι κώδικα το θυμήθηκα και είπα να δω αν το έχει αντιμετωπίσει κανείς με επιτυχία.

    Στο πρόβλημα επίσης προστίθεται και το θέμα του cross-browser javascript compatibility (το οποίο βέβαια λύνεται σε ότι αφορά τον κώδικα) αλλά και το θέμα του πως συμπεριφέρονται οι άλλοι (πλην του IE) browsers σε σχέση με το window.name και τα multiple browser / browser window instances (βλ. tabbed browsing κλπ)

    Το έχει ψάξει κανείς; Έχετε καμιά καλή ιδέα;

    φιλικά
    rousso

    σ/σ: βέβαια το ερώτημά μου δεν έχει να κάνει και τόσο πολύ με ASP.NET όσο με JavaScript αλλά δεν παύει να είναι σχετικό με το συγκεκριμένο forum...

    * δεν σας λείπει η άνω τελεία πολλές φορές από το πληκτρολόγιό σας;


    rousso
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems