javascript IFRAME

Συζητήσεις για γλώσσες προγραμματισμού και θέματα σχετικά με προγραμματισμό.
Post Reply
Dimitris
bit level
bit level
Posts: 38
Joined: Tue May 04, 2004 8:12 pm

javascript IFRAME

Post by Dimitris » Wed May 25, 2005 5:30 pm

Έχω μια σελίδα η οποία έχει ένα iframe το οποίο φορτώνει κάποια άλλη σελίδα. Μπορώ με κάποιον τρόπο να πάρω τα περιεχόμενα της σελίδας που ανοίγει το iframe? Για παράδειγμα θέλω όταν φορτώνει η σελίδα στο iframe να πάρω το τίτλο της και να το βάλω σε μια μεταβλητή.
User avatar
HdkiLLeR
Venus Project Founder
Venus Project Founder
Posts: 4356
Joined: Tue Jan 27, 2004 4:41 pm
Academic status: Alumnus/a
Gender:
Location: New York, NY
Contact:

Post by HdkiLLeR » Wed May 25, 2005 10:27 pm

Δώσε λίγες περισσότερες πληροφορίες, το χρησιμοποιείς μόνο html/xhtml; js; κάποια server side γλώσσα php/jsp;
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS d-->--- s+:+ a- C++(+++) BILS++++$ P--- L++++>+++++ E--- W+++ N+ o+ K w--
O M+ V-- PS++>+++ PE- Y++ PGP++ t+ 5+ X+ R* tv b++ DI- D+ G+++ e+++>++++ h r++ y++
------END GEEK CODE BLOCK------

"UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity." -- Dennis Ritchie
Dimitris
bit level
bit level
Posts: 38
Joined: Tue May 04, 2004 8:12 pm

Post by Dimitris » Wed May 25, 2005 11:02 pm

Χρησιμοποιώ μόνο xhtml και javascript. Για τη δουλειά που το χρειάζομαι δεν μπορώ να χρησιμοποιήσω κάτι άλλο. Βασικά το πρόβλημα που έχω είναι το εξής: όταν έχεις το iframe και του ορίζεις το src του δίνεις το path στο οποίο βρίσκεται η σελίδα την οποία θέλεις να ανοίξεις. Στην περίπτωση όμως που αυτή η σελίδα δεν υπάρχει τότε σου βγάζει το γνωστό μήνυμα The page cannot be displayed....Θέλω να βρώ έναν τρόπο έτσι ώστε όποτε δεν υπάρχει η σελίδα τότε να μην εμφανίζεται τίποτα μέσα στο iframe. Βασικά δεν γνωρίζω κάποιον τρόπο μέσω javascript να ελέγχεις εαν υπάρχει το αρχείο ή όχι (πχ File.exist("path")) και έτσι σκέφτηκα να διαβάζω τον τίτλο της σελίδας και να κρίνω από εκεί εαν υπάρχει η σελίδα ή όχι ( γιατί πχ όταν δεν βρίσκει την σελίδα τότε σου εμφανίζει μια default η οποία έχει τίτλο <title>Cannot find server</title>). Να σημειώσω ότι το src στο iframe δεν το δίνω με το χέρι αλλά μπαίνει αυτόματα μέσω javascript κάθε φορά που φορτώνεται η σελίδα, οπότε κάθε φορά δεν ξέρω αν υπάρχει το path που μπαίνει στο src ή όχι.
Ελπίζω να έγινα πιο κατανοητός.....
User avatar
Skeftomilos
bit level
bit level
Posts: 43
Joined: Fri Mar 04, 2005 8:08 am
Location: Ν.Κόσμος

Post by Skeftomilos » Thu May 26, 2005 2:46 am

Το ερώτημά σου Dimitris έχει πολύ ενδιαφέρον κι έχει απασχολήσει κι εμένα. Κατά περίεργο τρόπο η JavaScript δεν έχει πρόσβαση στους headers του response του server, και επομένως δεν είναι δυνατή η ανάγνωση του header Status που θα μας απαντούσε εύκολα και αξιόπιστα αν η σελίδα βρέθηκε (200) ή όχι (404). Προσωπικά δε μπορώ να φανταστώ τι προβλήματα ασφάλειας θα μπορούσαν να δημιουργηθούν σε μια τέτοια περίπτωση, αλλά αφήνω κι ένα ενδεχόμενο να υπάρχει τρόπος πρόσβασης και να μην τον γνωρίζω.

Το να διαβάσεις τον τίτλο του iframe είναι μάλλον απλή υπόθεση. Παγίδευσε το συμβάν onload του iframe:

Code: Select all

<iframe onload="iframe_load()"></iframe>
... και στο χειριστή συμβάντος μπορείς να διαβάσεις τον τίτλο ή ότι άλλο θέλεις:

Code: Select all

<script>
  function iframe_load() {
    var s
    s = frames[0].document.documentElement.innerHTML // Ολόκληρος ο HTML κώδικας της σελίδας του iframe.

    s = frames[0].document.title                     // Μόνο ο τίτλος.

    var element = frames[0].document.getElementById("something")
    if (element) s = element.innerHTML               // Κάποιο element της σελίδας με id="something".

    alert(s)
  }
</script>
Για να μην εμφανίζεται τίποτα στη σελίδα, ο απλούστερος τρόπος είναι να κάνεις ξανά redirect στην κενή σελίδα:

frames[0].location.href = "about:blank"

Προϋπόθεση για να έχει πρόσβαση η μία σελίδα στις ιδιότητες της άλλης είναι να ανήκουν και οι δύο στο ίδιο domain. Η JavaScript δεν επιτρέπει cross-domain scripting. Με άλλα λόγια αν η σελίδα του iframe ήρθε από κάποια τυχαία θέση του ιστού ... κλάφτα Χαράλαμπε.

Πάντως όλα αυτά είναι μάλλον μάταια. Έχεις δοκιμάσει να δεις τη σελίδα και με τον Firefox? Αντί για γράμματα σου πετάει ένα popup μήνυμα λάθους που δε μπορείς να εμποδίσεις. Άμα το δεις θα σε πιάσει μελαγχολία.

Μια άλλη ιδέα είναι να μεταφέρεις τον έλεγχο ύπαρξης της σελίδας στον server. Π.χ. μπορείς να έχεις μία δυναμική σελίδα που θα δέχεται ως παράμετρο μία άλλη σελίδα την οποία θα επιστρέφει αν υπάρχει. Αν δηλαδή το URL είναι http://www.foo.com/hub.asp?p=http://www ... mepage.htm η σελίδα hub.asp να επιστρέφει τη σελίδα somepage.htm ή μια κενή αν δεν υπάρχει (empty.htm).

Μια άλλη παλαβή ιδέα είναι να χρησιμοποιήσεις images. Το tag img επιτρέπει εκτός από το onload και το onerror, το οποίο τρέχει αν η εικόνα δε βρεθεί. Αν λοιπόν υπάρχει η δυνατότητα μπορείς να συνοδεύεις κάθε υπαρκτή σελίδα με ένα ομώνυμο image, π.χ. something.htm - something.gif. Ο browser θα ζητά πρώτα την εικόνα και αν βρεθεί (φορτωθεί) θα ζητά την αντίστοιχη σελίδα ξέροντας ότι υπάρχει. Οι εικόνες μπορούν να είναι διάφανα gif 1x1, και το tag img που θα τις δέχεται μπορεί να είναι κρυμμένο (display:none) για να είσαι σίγουρος ότι αυτό το hack δε θα έχει οπτικές παρενέργειες.
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.
Post Reply

Return to “Προγραμματισμός”