Το ερώτημά σου 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 δε θα έχει οπτικές παρενέργειες.