我有一个链接(在Font Awesome图标上),如下所示:
<a href="https://twitter.com/intent/tweet?text=Some text about this link&url=http://some.site.co/wow/greatamp;via=toby1kenobi">
<span class="fa fa-twitter-square"></span>
</a>
我正在使用“有限依赖关系”下的Javascript代码段&#39;在this page上,这是在链接之后。它是页面上唯一的网络意图。
如果我点击链接,Twitter弹出窗口将打开和,原始页面将导航到弹出窗口中显示的相同内容。
我无法弄清楚我做错了什么 - 如果我将另一个事件附加到链接并调用preventDefault(),那就会停止重复,但我认为不应该这样做
修改 这是Twitter的代码:
(function() {
if (window.__twitterIntentHandler) return;
var intentRegex = /twitter\.com(\:\d{2,4})?\/intent\/(\w+)/,
windowOptions = 'scrollbars=yes,resizable=yes,toolbar=no,location=yes',
width = 550,
height = 420,
winHeight = screen.height,
winWidth = screen.width;
function handleIntent(e) {
e = e || window.event;
var target = e.target || e.srcElement,
m, left, top;
while (target && target.nodeName.toLowerCase() !== 'a') {
target = target.parentNode;
}
if (target && target.nodeName.toLowerCase() === 'a' && target.href) {
m = target.href.match(intentRegex);
if (m) {
left = Math.round((winWidth / 2) - (width / 2));
top = 0;
if (winHeight > height) {
top = Math.round((winHeight / 2) - (height / 2));
}
window.open(target.href, 'intent', windowOptions + ',width=' + width +
',height=' + height + ',left=' + left + ',top=' + top);
e.returnValue = false;
e.preventDefault && e.preventDefault();
}
}
}
if (document.addEventListener) {
document.addEventListener('click', handleIntent, false);
} else if (document.attachEvent) {
document.attachEvent('onclick', handleIntent);
}
window.__twitterIntentHandler = true;
}());
&#13;
它绑定到文档的click事件(而不是任何锚点),我不明白它为什么不取消默认导航。它似乎击中了&#34; e.preventDefault&amp;&amp; e.preventDefault();&#34;行好了。
答案 0 :(得分:3)
我知道这个问题是从7月份开始的,但是如果有其他人遇到这个问题,我在创建一个带有onclick
属性的链接时会遇到同样的事情,打开一个弹出窗口。看起来因为我们还包括platform.twitter.com/widgets.js
这个widgets.js文件包含了触发弹出窗口的代码。我删除了onclick,仍然创建了弹出窗口(只有一个普通的<a>
标记链接)。它只是一种解决方法,但它确实解决了手头的问题。现在我只想弄清楚是否可以某种方式从open.window
禁用widgets.js
功能。
答案 1 :(得分:0)
尝试
var factText = <!---text you want to share -->;
var redirectUrl = <!---url you want to redirect from twitter -->;
// Convert to string
var factStr = factText.toString();
// Fact length
var factLen = factText.length;
// Formats "facts" that are too long... remove if not needed
if (factLen > 103) { // max chacters allowed
// trim, and allow space for '...'"
var trimFact = factStr.substring(0, 70);
var trimFact = trimFact.trim(); //<-- ensures the last character isnt ' '
factStr = trimFact + "...";
}
// Update the link
var linkRef = " https://twitter.com/intent/tweet?text= " + factStr +"&url="+ redirectUrl +"&hashtags=tweetTest";
window.open(linkRef, 'mywin','left=20,top=20,width=500,height=500,toolbar=1,resizable=0')
jQuery('#factLink').attr('href', linkRef);
答案 2 :(得分:-1)
问题原因是widget.js
代码添加了第二个意图,original_referer=
添加到您请求的意图中,而presto 2代价为一个。
https://twitter.com/intent/user?screen_name=&amp; original_referer =
{function r(t){var e=~a.host.indexOf("poptip.com")?"https://poptip.com":a.href,n="original_referer="+e;return[t,n].join(-1==t.indexOf("?")?"?":"&")}
换句话说,您添加的代码重复了widget.js中已包含的Intent Pop up代码功能