2009-09-04 9 views
1

Je me demande comment cela devrait être fait correctement.html invalide (étiquette cible href)

j'ai couru une page im travaillant à travers le w3 html validateor et je me suis un message d'erreur

ligne 47, colonne 54:. Attribut « cible » existe, mais ne peut pas être utilisé pour cet élément **

<ul><li><a href="./jobops/1000 Design PM.pdf" target="blank">1000 Design PM</a></li> 

Vous avez utilisé l'attribut ci-dessus dans votre document, mais le type de document que vous utilisez ne prend pas en charge cet attribut pour cet élément. Cette erreur est souvent due à une utilisation incorrecte du type de document "Strict" avec un document utilisant des cadres (par exemple, vous devez utiliser le type de document "Transitional" pour obtenir l'attribut "target") ou en utilisant des extensions propriétaires du fournisseur. marginheight "(ceci est généralement fixé en utilisant CSS pour obtenir l'effet désiré).

une idée sur la façon dont je peux avoir un lien ouvrir une nouvelle fenêtre sans utiliser le tag cible?

Répondre

4

Vous pouvez utiliser JavaScript to open new windows, ce qui évite que la cible ne soit invalide dans le langage HTML moderne. Cependant, cela contourne les différents systèmes mis en place pour les avertir des nouvelles fenêtres (ou les empêcher de s'ouvrir), il est donc préférable d'utiliser l'attribut target (et de passer à un Doctype qui le permet).

Mieux encore est de laisser à l'utilisateur de décider quand il veut une nouvelle fenêtre. Mis à part le facteur d'agacement, ils introduisent accessibility problems.

+1

+1 pour "Mieux encore, c'est à l'utilisateur de décider quand il veut une nouvelle fenêtre" – Mayo

1

Ne devrait-il ...

target="_blank" 

Quelle que soit ... Vous pouvez ouvrir une nouvelle fenêtre en utilisant javascript, mais qui brise la beauté de la navigation simple. Que faire si je navigue en utilisant Lynx ou quelque chose?

+3

Il devrait être, mais cela ne résout pas le problème – Quentin

+1

window.open est une fonction. Vous l'appelez avec des arguments, vous ne lui attribuez pas d'URL. – Quentin

+1

Ne pas abuser 'rel' pour ça. Mettez simplement ces liens dans une classe nommée '_blank' ou plus. – Gumbo

0

utilisant:

target="_blank" 

strictes méthodes de pauses validation XHTML. Here's un document détaillant une solution de contournement:

0

Au lieu de target = "_ blank" (qui ne sera jamais valider), vous pouvez utiliser javascript comme ceci:

<a onclick='window.open("./jobops/1000 Design PM.pdf", "_blank");return false;' href="./jobops/1000 Design PM.pdf">1000 Design PM</a> 

Ensuite, le lien est ouvert dans une nouvelle fenêtre, et votre page va valider.

Les utilisateurs qui n'ont pas le Javascript activé (même si ce n'est que 2% de tous les utilisateurs), pourront toujours suivre le lien avec cette méthode. Le gars ont un bon point dans les commentaires :)

ont un bon week-end, tout le monde ...

+0

Est-ce une méthode sûre cependant - je sais que certaines personnes courent sans Javascript activé (pas souvent admis). Ou est-ce que cela s'applique uniquement aux scripts définis? –

+0

Il y a beaucoup de façons de l'implémenter en utilisant window.open, et c'est le pire. Si JavaScript n'est pas disponible, les liens pointent vers le haut de la page. D'ailleurs, puisqu'il n'y a pas de valeur de retour du gestionnaire d'événements, il sera toujours lié au début de la page (même si la nouvelle fenêtre est ouverte). – Quentin

+1

Vraiment, il devrait être '1000 Design PM' pour permettre aux utilisateurs avec javascript désactivé pour télécharger/ouvrir le pdf. – voyager

1

Le target attribute ne fait pas partie des variantes strictes de HTML 4 et XHTML 1.0 ainsi que XHTML 1.1.

Vous devez utiliser une solution de contournement en utilisant JavaScript:

<a href="./jobops/1000 Design PM.pdf" class="_blank">1000 Design PM</a> 

var aElems = document.getElementsByTagName("a"); 
for (var i=0, n=aElems.length; i<n; ++i) { 
    if (/(?:^|\s+)_blank(?:\s+|$)/.test(aElems[i].className)) { 
     aElems[i].onclick = function() { 
      return !window.open(this.href, "_blank"); 
     } 
    } 
} 

Or (à l'avenir) CSS 3 (voir Hyperlink Presentation Module):

a._blank { 
    target: new; 
} 
+0

La cible ne fait pas partie de HTML 5? http://www.w3.org/TR/html5/history.html # attr-hyperlink-target – Quentin

+0

@David Dorward: Correction de;) – Gumbo

+0

Ce n'est pas vraiment une solution pour tout sauf un validateur. Vous êtes encore en train de virer sur un attribut qui n'est pas dans la spécification dont vous êtes en train de dire que le document est en dehors, et en espérant que le navigateur a implanté ce comportement externe de 'target'. Au lieu de cela, vous devez ajouter un événement sur le clic pour ouvrir le lien dans une fenêtre. Voir http://www.badlydrawntoy.com/2009/03/03/replacing-target_blank-for-strict-xhtml-using-jquery-redux/ pour plus d'informations. –

3
target="_blank" 

ne validera pas stricte car l'attribut 'target' a été déprécié. Au lieu de cela, essayez quelque chose de similaire à la solution de contournement onclick mentionnée ci-dessus, mais vous n'avez pas non plus besoin du "_blank" là-dedans. Simplement:

<a href="./jobops/1000 Design PM.pdf" onclick="window.open(this.href); return false;">1000 Design PM</a> 

Fonctionne. La raison de la dépréciation de "target" est que HTML est utilisé pour marquer sémantiquement les données alors que l'attribut target fournissait un comportement, ce qui est le but de javascript.

Si l'utilisateur a javascript désactivé alors l'URL ouvrira simplement dans la même fenêtre.

+1

La cible n'est pas obsolète, elle n'apparaît pas dans les variantes strictes. – Quentin

+0

Onclick lance également une violation – Crash893

+0

Quelle est la violation? – Evernoob

1

Selon le W3C, il semble que l'attribut « cible » ne dépréciée plus en HTML 5:

L'attribut cible pour les éléments a et la région n'est plus dépréciée, car il est utile Applications Web, par exemple en conjonction avec iframe.

http://www.w3.org/TR/html5-diff/