2011-01-12 3 views
22

Je vient de valider mon XHTML réelle Strict 1.0 doc avec le service w3c validateur .. et il est dit que,XHTML Strict 1.0 - target = "_ blank" n'est pas valide?

<ul id="socialnetwork"> 
      <li><a href="http://www.twitter.com" target="_blank"></a></li> 
      <li><a href="http://www.flickr.com" target="_blank"></a></li> 
      <li><a href="http://www.xing.com" target="_blank"></a></li> 
      <li><a href="http://www.rss.com" target="_blank"></a></li> 
</ul> 

la target = "_ blank" est pas valide .. mais je dois le blanc cible pour une nouvelle onglet s'ouvrira dans le navigateur, de sorte que l'utilisateur ne quitte pas la page principale.

Que puis-je faire? Pourquoi n'est-ce pas valide?

Répondre

15

Vous pouvez consulter les W3 Foire aux questions: http://www.w3.org/MarkUp/2004/xhtml-faq#target

Pourquoi est l'attribut cible retiré de XHTML 1.1?

Ce n'était pas le cas. XHTML 1.0 est disponible en trois versions: strict, transitionnel et frameset. Ces trois éléments ont été délibérément conservés le plus près possible de HTML 4.01, comme le permet le langage XML. XHTML 1.1 est une version mise à jour de XHTML 1.0 strict, et aucune version de HTML strict n'a jamais inclus l'attribut target. Les deux autres versions, transitionnelle et frameset, n'ont pas été mises à jour, car il n'y avait rien à mettre à jour. Si vous voulez utiliser l'attribut target, utilisez XHTML 1.0 transitionnel.

+0

D'accord, je dois laisser tomber Strict .. maintenant son heure de transition. – Tomkay

+4

Comment ouvrir un lien dans un nouvel onglet sans l'attribut target, et sans JavaScript, dans ce scénario? – user1886419

+0

S'il vous plaît ne pas essayer d'enlever les bonnes réponses utiles comme ça. Même si vous avez terminé avec SO, ils bénéficient toujours aux autres. – hvd

1

Bien que je ne puisse pas dire pourquoi cet attribut est considéré comme invalide en guise de solution de contournement, vous pouvez ajouter cet attribut avec javascript si vous souhaitez que votre site soit validé en tant que XHTML Strict.

5

Je suggère pas ajoutant dans l'attribut target. Il a été abandonné pour des raisons d'accessibilité, et je ne l'aime pas lorsque la page décide pour moi comment les balises de mon navigateur s'ouvrent. Bien sûr, vous êtes libre de le faire, si vous le souhaitez. Je vais vous montrer une méthode JavaScript qui Darin mentionné ci-dessus qui vous permet de valider en XHTML 1.0 Strict ou XHTML 1.1:

code HTML:

<!-- Added link titles for better testing purposes --> 
<ul id="socialnetwork"> 
    <li><a href="http://www.twitter.com/" class="targetblank">Twitter</a></li> 
    <li><a href="http://www.flickr.com/" class="targetblank">Flickr</a></li> 
    <li><a href="http://www.xing.com/" class="targetblank">XING</a></li> 
    <li><a href="http://www.rss.com/" class="targetblank">RSS</a></li> 
</ul> 

code JavaScript:

window.onload = function() { 
    // Code if document.getElementByClassName() doesn't exist 
    if (document.getElementsByClassName == undefined) { 
     document.getElementsByClassName = function(className) { 
      var hasClassName = new RegExp("(?:^|\\s)" + className + "(?:$|\\s)"); 
      var allElements = document.getElementsByTagName("*"); 
      var results = []; 

      var element; 
      for (var i = 0; (element = allElements[i]) != null; i++) { 
       var elementClass = element.className; 
       if (elementClass && elementClass.indexOf(className) != -1 && hasClassName.test(elementClass)) 
        results.push(element); 
      } 

      return results; 
     } 
    } 

    var anchorList = document.getElementsByClassName('targetblank'); 
    for (var i in anchorList) { 
     anchorList[i].target = '_blank'; 
    } 
} 

Bien sûr, vous pouvez omettre window.onload si vous l'avez déjà inclus ailleurs, mais je recommande de l'utiliser (ou d'utiliser une autre fonction de chargement, telle quede JQuery) afin que le JavaScript se charge lorsque la page se termine le chargement. Maintenant, tout ce que vous devez faire est de donner à chaque lien d'ancrage une classe de "targetblank", et les liens devraient s'ouvrir dans un nouvel onglet.

3

Pour cette situation, j'utilise une simple solution jQuery qui le valide avec XHTML Strict, et permet l'apparition de nouvelles fenêtres.

<a href="http://www.example.com" class="linkExternal">Example URL</a> 

<script type="text/javascript"> 
$(function(){ 
    $('a.linkExternal').on('click',function(e){ 
     e.preventDefault(); 
     window.open($(this).attr('href')); 
    }); 
}); 
0

Essayez ceci:

<a href="#" onclick="window.open('urlgoeshere');">Link</a> 
+3

2 numéros; 1- href = '#' va sauter en haut de la page. 2- vous avez tué SEO. –

9

La question que vous devriez vous poser est pas comment « contourner » la restriction de stricte mais pourquoi vous voulez utiliser XHTML 1.0 Strict en premier lieu?

Dans votre cas, j'utiliserais simplement Transitional comme DTD.À moins bien sûr que vous ne développiez pour un système d'exploitation spécifique qui, par exemple, ne permet pas l'ouverture de plusieurs fenêtres, par exemple dans les systèmes de voiture, un téléphone portable, ou des appareils plus exotiques. Ce qui est, btw, la raison pour laquelle la cible est absente dans le HTML Strict.

Mais comme vous semblez développer pour une utilisation « normale » type de document devrait refléter le fait que vous devez utiliser:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd"> 

Voir aussi why was target removed from xhtml acclamations J

-1

Je préfère cette

<a href="http://myurl.com" onclick="this.target='_blank'">Anchor text</a> 
0

La meilleure façon d'utiliser la cible dans XHTML STRICT est: onclick="target='_blank';"

<a href="http://botje.tnhteam.com/" onclick="target='_blank';">Botje is overal</a> 

Exemple: click the STRICT button at the bottom

si vous avez besoin _self ou tout autre cible que vous pouvez changer la _blank à _self par exemple: onclick="target='_self';"

J'espère que cette réponse est utile à certains d'entre vous ...

+1

Le simple fait de supprimer l'attribut pour passer la validation statique ne le rend pas correct. – Brad

+0

oui il va valider quand l'attribut a été supprimé mais il veut ouvrir l'URL dans une nouvelle fenêtre ou un nouvel onglet alors la meilleure option pour utiliser _blank est d'utiliser 'onclick =" target = '_ self'; "' pour obtenir la page valider et ceci ne tue pas le SEO, 'href' a une valeur valide. Ne jamais utiliser '# 'dans' href' Je pense que ce n'est pas bon pour le SEO ... – jagb

+0

Vous avez 'XHTML 1.0 Strict' et *** pagespeed_no_defer *** dans' script pagespeed_no_defer = "" ** ** non valide ** pour _XHTML 1.0 Strict_ – Kiquenet

Questions connexes