如果锚标记中有图像,JS 将不会捕获 link
JS won't catch a link if there is an image in the anchor tag
我正在使用我找到的一些代码来设置 vanilla js 社交分享按钮。该代码使 link 在弹出窗口 window 中打开。如果标签的内容只是纯文本,它工作得很好,但如果我在标签内放置一个 img,然后弹出窗口 window 打开,但 link 不会传递给它。这只是一个“about:blank” window.
这是 js:
// create social networking pop-ups
(function() {
// link selector and pop-up window size
var Config = {
Link: "a.share",
Width: 500,
Height: 500
};
// add handler links
var slink = document.querySelectorAll(Config.Link);
for (var a = 0; a < slink.length; a++) {
slink[a].onclick = PopupHandler;
}
// create popup
function PopupHandler(e) {
e = (e ? e : window.event);
var t = (e.target ? e.target : e.srcElement);
// popup position
var
px = Math.floor(((screen.availWidth || 1024) - Config.Width) / 2),
py = Math.floor(((screen.availHeight || 700) - Config.Height) / 2);
// open popup
var popup = window.open(t.href, "social",
"width="+Config.Width+",height="+Config.Height+
",left="+px+",top="+py+
",location=0,menubar=0,toolbar=0,status=0,scrollbars=1,resizable=1");
if (popup) {
popup.focus();
if (e.preventDefault) e.preventDefault();
e.returnValue = false;
}
return !!popup;
}
}());
这是 HTML。如果我使用它,它会完美地工作:
<a href="https://www.facebook.com/sharer/sharer.php?u=https://www.example.com/blog/test.html" class="facebook share">Facebook</a>
但是如果我使用它,弹出窗口会打开,但 link 不会加载到新的 window 中。它只是打开一个“about:blank”弹出窗口 window:
<a href="https://www.facebook.com/sharer/sharer.php?u=https://www.example.com/blog/test.html" class="facebook share"><img src="/static/images/facebook-share.png" width="64px"></a>
可能是什么问题?
有问题的行是:
var t = (e.target ? e.target : e.srcElement);
在第二种情况下,t
指的是 img
标签,它没有 href
属性,因此页面打开时显示黑色。
您可以简单地 运行 检查以防返回的是 img
标签,查找父 a
标签。
// create social networking pop-ups
(function() {
// link selector and pop-up window size
var Config = {
Link: "a.share",
Width: 500,
Height: 500
};
// add handler links
var slink = document.querySelectorAll(Config.Link);
for (var a = 0; a < slink.length; a++) {
slink[a].onclick = PopupHandler;
}
// create popup
function PopupHandler(e) {
e = (e ? e : window.event);
var t = (e.target ? e.target : e.srcElement);
if (t.tagName === "IMG") {
// look for parent "A" tag
t = t.parentNode;
while (t.tagName !== "A" && t.tagName !== "BODY") {
t = t.parentNode;
}
}
// popup position
var
px = Math.floor(((screen.availWidth || 1024) - Config.Width) / 2),
py = Math.floor(((screen.availHeight || 700) - Config.Height) / 2);
// open popup
var popup = window.open(t.href, "social",
"width="+Config.Width+",height="+Config.Height+
",left="+px+",top="+py+
",location=0,menubar=0,toolbar=0,status=0,scrollbars=1,resizable=1");
if (popup) {
popup.focus();
if (e.preventDefault) e.preventDefault();
e.returnValue = false;
}
return !!popup;
}
}());
我正在使用我找到的一些代码来设置 vanilla js 社交分享按钮。该代码使 link 在弹出窗口 window 中打开。如果标签的内容只是纯文本,它工作得很好,但如果我在标签内放置一个 img,然后弹出窗口 window 打开,但 link 不会传递给它。这只是一个“about:blank” window.
这是 js:
// create social networking pop-ups
(function() {
// link selector and pop-up window size
var Config = {
Link: "a.share",
Width: 500,
Height: 500
};
// add handler links
var slink = document.querySelectorAll(Config.Link);
for (var a = 0; a < slink.length; a++) {
slink[a].onclick = PopupHandler;
}
// create popup
function PopupHandler(e) {
e = (e ? e : window.event);
var t = (e.target ? e.target : e.srcElement);
// popup position
var
px = Math.floor(((screen.availWidth || 1024) - Config.Width) / 2),
py = Math.floor(((screen.availHeight || 700) - Config.Height) / 2);
// open popup
var popup = window.open(t.href, "social",
"width="+Config.Width+",height="+Config.Height+
",left="+px+",top="+py+
",location=0,menubar=0,toolbar=0,status=0,scrollbars=1,resizable=1");
if (popup) {
popup.focus();
if (e.preventDefault) e.preventDefault();
e.returnValue = false;
}
return !!popup;
}
}());
这是 HTML。如果我使用它,它会完美地工作:
<a href="https://www.facebook.com/sharer/sharer.php?u=https://www.example.com/blog/test.html" class="facebook share">Facebook</a>
但是如果我使用它,弹出窗口会打开,但 link 不会加载到新的 window 中。它只是打开一个“about:blank”弹出窗口 window:
<a href="https://www.facebook.com/sharer/sharer.php?u=https://www.example.com/blog/test.html" class="facebook share"><img src="/static/images/facebook-share.png" width="64px"></a>
可能是什么问题?
有问题的行是:
var t = (e.target ? e.target : e.srcElement);
在第二种情况下,t
指的是 img
标签,它没有 href
属性,因此页面打开时显示黑色。
您可以简单地 运行 检查以防返回的是 img
标签,查找父 a
标签。
// create social networking pop-ups
(function() {
// link selector and pop-up window size
var Config = {
Link: "a.share",
Width: 500,
Height: 500
};
// add handler links
var slink = document.querySelectorAll(Config.Link);
for (var a = 0; a < slink.length; a++) {
slink[a].onclick = PopupHandler;
}
// create popup
function PopupHandler(e) {
e = (e ? e : window.event);
var t = (e.target ? e.target : e.srcElement);
if (t.tagName === "IMG") {
// look for parent "A" tag
t = t.parentNode;
while (t.tagName !== "A" && t.tagName !== "BODY") {
t = t.parentNode;
}
}
// popup position
var
px = Math.floor(((screen.availWidth || 1024) - Config.Width) / 2),
py = Math.floor(((screen.availHeight || 700) - Config.Height) / 2);
// open popup
var popup = window.open(t.href, "social",
"width="+Config.Width+",height="+Config.Height+
",left="+px+",top="+py+
",location=0,menubar=0,toolbar=0,status=0,scrollbars=1,resizable=1");
if (popup) {
popup.focus();
if (e.preventDefault) e.preventDefault();
e.returnValue = false;
}
return !!popup;
}
}());