web-dev-qa-db-ja.com

XHTML Strict 1.0-target = "_ blank"は無効ですか?

私は実際のXHTML Strict 1.0ドキュメントをw3c検証サービスで検証したところ、

<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>

target = "_ blank"は無効です。しかし、ユーザーがメインページを離れないように、ブラウザーで新しいタブが開くように、ターゲットを空白にする必要があります。

私に何ができる?なぜこれが無効なのですか?

25
Tomkay

W3のよくある質問: http://www.w3.org/MarkUp/2004/xhtml-faq#target をご覧ください。

XHTML 1.1からtarget属性が削除されたのはなぜですか?

そうではなかった。 XHTML 1.0には、strict、transitional、framesetの3つのバージョンがあります。これら3つはすべて、XMLが許す限り、意図的にHTML 4.01にできるだけ近づけました。 XHTML 1.1はXHTML 1.0 strictの更新バージョンであり、HTML strictのどのバージョンもtarget属性を含んでいません。他の2つのバージョン、transitionalとframesetは、更新するものがなかったため、更新されませんでした。 target属性を使用する場合は、XHTML 1.0トランジショナルを使用してください。

16
user282931

自問する必要があるのは、Strictの制限を「回避」する方法ではなく、なぜXHTML Strict 1.0を最初から使用したいのかです。

あなたの場合、DTDとしてTransitionalを使用します。もちろん、特定のオペレーティングシステム用に開発している場合を除いて、たとえば、自動車システム、携帯電話、またはよりエキゾチックなアプライアンスなどで複数のウィンドウを開くことはできません。これが、HTML Strictにtargetがない理由です。

しかし、「通常の」使用のために開発しているように見えるので、ドキュメントタイプはそれを反映している必要があり、使用する必要があります。

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

参照 xhtmlからターゲットが削除された理由 歓声J

9
theking2

notをターゲット属性に追加することをお勧めします。それはアクセシビリティの理由で削除されました、そしてページmeを決定するときに私はそれが嫌いです。もちろん、ご希望であれば自由に行うことができます。 XHTML 1.0 StrictまたはXHTML 1.1として検証できるようにする、Darinが前述したJavaScriptメソッドを紹介します。

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>
_

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';
    }
}
_

もちろん、window.onloadを既に別の場所に含めている場合は省略できますが、ページの読み込みが完了したときにJavaScriptが読み込まれるように、それを使用する(またはJQueryの$(document).ready();などの別のロード関数を使用する)ことをお勧めします。これで、各アンカーリンクに "targetblank"のクラスを与えるだけで、リンクが新しいタブで開くはずです。

7
kevinji

この状況では、XHTML Strictで検証し、新しいウィンドウを表示できるようにする単純なjQueryソリューションを使用します。

<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'));
    });
});
3

この属性が回避策として無効であると見なされる理由は私にはわかりませんが、サイトをXHTML Strictとして検証したい場合は、JavaScriptでこの属性を追加できます。

1
Darin Dimitrov

XHTML STRICTでターゲットを使用する最良の方法は次のとおりです:onclick="target='_blank';"

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

例: 下部の[STRICT]ボタンをクリック

_selfまたは他のターゲットが必要な場合は、_blankを_selfに変更できます。例:onclick="target='_self';"

この回答があなたの一部に役立つことを願っています...

1
jagb

これを試して:

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