5568 sujets

Sémantique web et HTML

Bonjour à tous,
J'aimerai pouvoir utiliser une iframe qui fonctionnerai comme un navigateur :
quand on clique sur un lien contenu dans l'iframe (par ex page google), celui ci ouvre le lien dans le même iframe, au lieu de l'ouvrir à la place de la page qui contient l'iframe!

Faut il utiliser du JS, ou autre?
Ouffff, j'espère que c'est compréhensible?!
Merci... Smiley cligne
Oui en effet, cela marche, j'ai du tomber sur un cas spécial tout à l'heure!!
Mais comment empêcher que les liens target="_blank" ouvrent une autre fenêtre?
Merci!
Modérateur
Si tu ne peux pas modifier le contenu de la page qui se trouve dans le iframe, je ne pense pas que tu puisses empêcher le target="_blank" d'ouvrir une nouvelle fenêtre. C'est le navigateur qui gère ça.
OK, merci...
J'ai un autre problème : je veux pouvoir naviguer dans l'historique de mon iframe...
Mais je vous laisse regarder mes codes qui vous montrerons ce que j'espère atteindre!
Voici mes codes :

webnav.php

<?

try
{	$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');}
catch(Exception $e)
{        die('Erreur : '.$e->getMessage());}

$reponse = $bdd->query('SELECT ID, link FROM nav ORDER BY ID DESC');
$donnees = $reponse->fetch();
echo $donnees['ID'];

[b]function History($hist)
{
$backID = $donnees['ID']+($hist);
$backrep = $bdd->query("SELECT ID, link FROM nav WHERE ID='$backID'");
$backdon = $backrep->fetch();
    $back = $backdon['link'];
    echo ($backdon['link'] . $backdon['ID']);
}[/b]
?>

<div>
<form  method="post" action="nav_post.php">
    <input class="adress" type="text" name="link" value="http://" />
    <input type="submit" value="go!" />
    <input type="button" value="prec" onclick="[b]History(-1)[/b]" />
</form>
</div>

            <?php
// Connexion à la base de données
try
{
	$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

?>
<?php
$reponse = $bdd->query('SELECT ID, link FROM nav ORDER BY ID DESC');

$donnees = $reponse->fetch();

    $link = $donnees['link'];
    echo ('<p><b>' . strip_tags($donnees['link']));

?> 

<div>
    <iframe name="nav" class="nav" src="<?php echo($donnees['link']) ?>"/>
</div>


<?php $reponse->closeCursor(); ?>


nav_post.php


<?php
// Connexion à la base de données
try
{
	$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

// Insertion à l'aide d'une requête préparée
$req = $bdd->prepare("INSERT INTO nav (ID, link) VALUES('', ?)");
$req->execute(array($_POST['link']));



// Redirection du visiteur
header('Location: webnav.php');
?>


Est-ce compréhensible?
Je suis plus ou moins débutant (les fonction, c'est tout neuf!), merci me guider!
Merciiiiiii Smiley biggrin
Modérateur
Il manque un peu d'explication sur ton objectif. Est-ce que la page que tu appeles dans le iframe est hébergée sur ton serveur? Le mieux serait de donner une explication complète de ce que le code doit faire, sinon on est obligé d'analyser le code pour deviner ce que ça devrait faire, ou pas.
Modifié par Tony Monast (27 Aug 2010 - 21:45)
Désolé, je m'explique...

Dans l'iframe est appelée la page qui est entrée dans l'input "adress" quand j'appuie sur GO...
Ca, ca marche :
Cette adresse que je saisis est enregistrée par nav_post.php dans une table BDD nommée "nav" (deux champs : ID (primary) et link (l'adresse web)). Là, webnav.php la récupère lors de la redirection et affiche l'iframe avec pour source le dernier lien qui est entré dans la table (d'où la requête SQL se terminant par 'DESC'). OK!

Maintenant, j'aimerais pouvoir revenir sur ma page précédente, mais toujours dans l'iframe!
J'ai donc essayé de créer une fonction permettant de naviguer dans l'historique (ma table BDD nav) grâce à l'ID des adresses : "Revenir en arrière = ID-1" et inversement (voir code en gras).

Je viens de me rendre compte qu'il serait nécessaire d'enregistrer dans ma BDD l'URL de chaque page visitée (et non seulement l'URL des pages entrées dans l'input "adress").

Merci pour ton aide Tony!

PS: je réalise ce code pour un webOS (mieux vaut le préciser, ça peu paraitre inutile!!)
Modérateur
Bonjour,

Je vais y aller seulement d'un point de vue théorique, en commençant par la structure de la table. Lorsqu'un nouvel utilisateur arrive sur ton application, tu lui attributs un numéro unique avec une fonction qui génère un UUID. Cet identifiant, tu dois le stocker dans une variable de session.

Ensuite, la table ressemblerait à ceci :

tblNavigation
- UUID
- URL
- DateHeure
- Ordre

Le champ UUID permettra à ton application d'être non seulement multi-utilisateurs, mais aussi de s'assurer que d'une session de navigation à une autre pour un même utilisateur, l'historique soit spécifique à chacune des sessions. J'éviterais pour ce champ d'utiliser l'ID de session pour une question de sécurité.

Le champ DateHeure est facultatif, mais ça peut être intéressant comme information, tout comme l'adresse IP.

Le champ Ordre lui devra être parfaitement séquentiel (1, 2, 3, 4, 5) pour la session actuelle.

Tu pourrais aussi stocker dans une variable de session l'ordre où l'utilisateur est rendu. Ensuite, lorsqu'il veut revenir en arrière, tu fais par exemple SESSION.OrdreActuelle = SESSION.OrdreActuelle - 1, puis tu fais ta requête SQL pour trouver l'ordre précédent. Évidemment, tu valides que ça ne tombe pas sous le chiffre 1. Tu peux aussi avoir une autre variable de session qui stocke l'ordre maximum.

J'ai pondu ça en 10 minutes au réveil ce matin, mais ça devrait le faire.
Modifié par Tony Monast (28 Aug 2010 - 14:41)
Modérateur
MenuBestOf a écrit :

Je viens de me rendre compte qu'il serait nécessaire d'enregistrer dans ma BDD l'URL de chaque page visitée (et non seulement l'URL des pages entrées dans l'input "adress").


Par page visitée, tu veux dire quand l'utilisateur clic sur un lien dans la page Web qui se trouve dans le iframe? Pour ça, je serais plutôt étonné que ce soit réalisable. Il faudrait voir du côté du Javascript pour détecter les clics, mais comme c'est un iframe contenant le site d'un autre domaine, j'ai l'impression que le navigateur empêchera de communiquer cette information pour des questions de sécurité. À vérifier quand même...
Ahhh... Mince alors! Oui je comprend ce que tu veux dire... Bon...
En tous cas merci pour tout!! Smiley biggrin
Modifié par Menubestof (30 Aug 2010 - 11:35)