C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[8]: 別タブで開くaタグのリンクについて


(過去ログ 178 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■102031 / inTopicNo.1)  別タブで開くaタグのリンクについて
  
□投稿者/ nabeya (1回)-(2023/06/09(Fri) 10:30:45)

分類:[HTML/CSS] 

2023/06/09(Fri) 10:32:39 編集(投稿者)

作成したWebページに以下のようなaタグを用意し、リンクを別タブで開くようにしています。
(迷惑投稿と判断されるため、タグ開始終了文字は全角にしています)

<a href="https://hogehoge.jp/hogehoge/)" target="hoge" rel="noreferrer">ここをクリック!</a>

ただ、このリンクを複数回クリックすると、その都度新しいタブが開いてしまいます。
(確認したブラウザはWindows10上のChrome)

このaタグのリンクをクリックした場合に生成されるタブは唯一にすることは可能でしょうか?
JavaScriptを使う必要があれば、その方法も教えて頂けると幸いです。
引用返信 編集キー/
■102034 / inTopicNo.2)  Re[1]: 別タブで開くaタグのリンクについて
□投稿者/ WebSurfer (2705回)-(2023/06/09(Fri) 12:00:24)
No102031 (nabeya さん) に返信

> <a href="https://hogehoge.jp/hogehoge/)" target="hoge" rel="noreferrer">ここをクリック!</a>
>
> ただ、このリンクを複数回クリックすると、その都度新しいタブが開いてしまいます。

rel="noreferrer" を設定しているからでしょう。削除すれば、やりたいこと、

> このaタグのリンクをクリックした場合に生成されるタブは唯一にする

はできるはずです。


参考:

HTML 属性: rel
https://developer.mozilla.org/ja/docs/Web/HTML/Attributes/rel

"noreferrer Referer ヘッダーを含めません。さらに、 noopener と同じ効果
もあります"

rel=noopener
https://developer.mozilla.org/ja/docs/Web/HTML/Attributes/rel/noopener

"noopener を使用した場合、ターゲット名に _top, _self, _parent 以外の
空でない名前を使用すると、新しいウィンドウやタブを開くかどうかの判断
において、すべて _blank と同様に扱われます"
引用返信 編集キー/
■102036 / inTopicNo.3)  Re[2]: 別タブで開くaタグのリンクについて
□投稿者/ nabeya (2回)-(2023/06/09(Fri) 12:52:35)
rel="noreferrer"をつけていると、そのリンク用の唯一タブは出来ないんですね。
rel="noreferrer"をつけているのはリンク元を見せたくない
(見られてマズいものはないが、恥ずかしい)ためなので、
その都度リンク先のタブが増えるのは仕方がないものとして諦めます。
引用返信 編集キー/
■102038 / inTopicNo.4)  Re[3]: 別タブで開くaタグのリンクについて
□投稿者/ WebSurfer (2707回)-(2023/06/09(Fri) 13:58:13)
No102036 (nabeya さん) に返信

> その都度リンク先のタブが増えるのは仕方がないものとして諦めます。

諦めてこの話は終わりにするなら「解決済み」マークをつけてこのスレッドは
クローズしてください。

しばらく他の方からの回答を待ちたいということであれば、その限りではあり
ませんが。
引用返信 編集キー/
■102042 / inTopicNo.5)  Re[4]: 別タブで開くaタグのリンクについて
□投稿者/ nabeya (3回)-(2023/06/11(Sun) 12:05:37)
> 諦めてこの話は終わりにするなら「解決済み」マークをつけてこのスレッドは
> クローズしてください。

同様の質問が無いかを調べていた時に過去の書き込みを見ましたが、
解決していないのに、「解決済み」にチェックをすべきではない、
と発言した人ですよね?
今回の質問に関しては、諦めたけど、解決はしていないので、そのようにしています。
引用返信 編集キー/
■102043 / inTopicNo.6)  Re[5]: 別タブで開くaタグのリンクについて
□投稿者/ WebSurfer (2708回)-(2023/06/11(Sun) 12:46:15)
No102042 (nabeya さん) に返信

> 解決していないのに、「解決済み」にチェックをすべきではない、
> と発言した人ですよね?

どのスレッドのことを言っているのですか? Q&A を続ければ解決できる可能性がある
のに止めて解決済みマークをつけて終わりにしたという話だったのでは。

> 今回の質問に関しては、諦めたけど、解決はしていないので、そのようにしています。

今回の場合は、回答で解決できないことが分った ⇒ なので諦めた ⇒ これ以上 Q&A は
不用ということだと理解してます。違いますか?

であれば、「解決できないことが分った」ことで解決と言うことで良いと思いますけど。
引用返信 編集キー/
■102044 / inTopicNo.7)  Re[6]: 別タブで開くaタグのリンクについて
□投稿者/ くま (6回)-(2023/06/11(Sun) 23:17:48)
こういう事?
https://developer.mozilla.org/ja/docs/Web/API/Window/open
JavaScript が無効な場合の代替手段を提供する


引用返信 編集キー/
■102045 / inTopicNo.8)  Re[7]: 別タブで開くaタグのリンクについて
□投稿者/ くま (7回)-(2023/06/12(Mon) 01:11:55)
2023/06/12(Mon) 01:50:24 編集(投稿者)

失礼noreferrerをしたいんでしたね

それなら先のサンプルを一部修正
ここを
//windowObjectReference = window.open(url, windowName);
この様に空のタブを開いてから移動するように変更
windowObjectReference = window.open('', windowName);
windowObjectReference.document.body.innerHTML = '<a id="reload" href="' + url + '" rel="noreferrer"></a>';
windowObjectReference.document.getElementById("reload").click();

※投稿エラーになるので半角<>は全角<>になっています。

またはこちら
windowObjectReference = window.open('', windowName);
let elem = windowObjectReference.document.createElement('a');
elem.href = url;
elem.rel = "noreferrer";
windowObjectReference.document.body.appendChild(elem);
elem.click();

引用返信 編集キー/
■102046 / inTopicNo.9)  Re[8]: 別タブで開くaタグのリンクについて
□投稿者/ ???? (1回)-(2023/06/12(Mon) 01:38:22)
2023/06/12(Mon) 01:39:49 編集(投稿者)

※送信ミスの為削除
引用返信 編集キー/
■102050 / inTopicNo.10)  Re[8]: 別タブで開くaタグのリンクについて
□投稿者/ WebSurfer (2709回)-(2023/06/12(Mon) 15:51:01)
No102045 (くま さん) に返信

> またはこちら
>     windowObjectReference = window.open('', windowName);
> 	let elem = windowObjectReference.document.createElement('a');
> 	elem.href = url;
> 	elem.rel = "noreferrer";
> 	windowObjectReference.document.body.appendChild(elem);
> 	elem.click();
> 

なるほど、それで複数 a タグをクリックしても同じ window で表示されて要求ヘッダに Refer
は含まれなくなりますね。

それを MDN の記事、

Window.open()
https://developer.mozilla.org/ja/docs/Web/API/Window/open

の「既存のウィンドウを再利用して target="_blank" を防止する」のセクションにある
サンプルコードに組み込んで、同じ a タグを続けてクリックしても要求が出ないように
するのが良さそうです。

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <script type="text/javascript">
        let windowObjectReference = null; // global variable
        let previousURL; /* global variable that will store the
                    url currently in the secondary window */

        function openRequestedSingleTab(url) {
            if (windowObjectReference === null || windowObjectReference.closed) {
                let a = document.createElement("a");
                a.href = url;
                a.rel = "noreferrer";
                windowObjectReference = window.open('', 'SingleSecondaryWindowName');
                windowObjectReference.document.body.appendChild(a);
                a.click();
            } else if (previousURL !== url) {
                let a = document.createElement("a");
                a.href = url;
                a.rel = "noreferrer";
                windowObjectReference = window.open('', 'SingleSecondaryWindowName');
                windowObjectReference.document.body.appendChild(a);
                a.click();
                /* if the resource to load is different,
                   then we load it in the already opened secondary window and then
                   we bring such window back on top/in front of its parent window. */
                windowObjectReference.focus();
            } else {
                windowObjectReference.focus();
            }
            previousURL = url;
            /* explanation: we store the current url in order to compare url
               in the event of another call of this function. */
        }

        window.addEventListener('DOMContentLoaded', () => {
            const links = document.querySelectorAll("a[target='SingleSecondaryWindowName']");

            for (const link of links) {
                link.addEventListener(
                    "click",
                    (event) => {
                        openRequestedSingleTab(link.href);
                        event.preventDefault();
                    },
                    false
                );
            }
        });
    </script>
</head>
<body>
    <a href="default" target="SingleSecondaryWindowName" rel="noreferrer">Default</a>
    <br />
    <a href="about" target="SingleSecondaryWindowName" rel="noreferrer">About</a>
    <br />
    <a href="contact" target="SingleSecondaryWindowName" rel="noreferrer">Contact</a>
</body>
</html>

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -