2015-07-24 2 views
2

У меня есть ссылка (на Потрясающий значке Font), который выглядит следующим образом:Twitter веб-Намерение всплывающего окна открытие дважды

<a href="https://twitter.com/intent/tweet?text=Some text about this link&amp;url=http://some.site.co/wow/greatamp;via=toby1kenobi"> 
    <span class="fa fa-twitter-square"></span> 
</a> 

, и я использую Фрагмент код JavaScript в разделе «Limited зависимостей» на this page, этой сразу после ссылки. Это единственное веб-намерение на странице.

Если я нажму ссылку, откроется всплывающее окно Twitter и исходная страница перейдет к тому же содержимому, отображаемому во всплывающем окне.

Я не могу понять, что я сделал неправильно - если я присоединяю другое событие к ссылке и вызываю preventDefault(), это останавливает дублирование, но я понимаю, что это не обязательно.

EDIT Вот код Твиттера:

(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; 
 
}());

Он связывается с храповым событием документа (а не какие-либо анкеры), я не понимаю, почему это происходит не отменять навигацию по умолчанию. Кажется, он попал в «e.preventDefault & & e.preventDefault();» line ok.

+0

показать нам полный код –

+0

Sure вещь, см.выше – toby1kenobi

ответ

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); 
+0

Спасибо за ответ. Извините, я должен был сказать, что я знаю, как использовать window.open, я просто пытаюсь понять, почему код, предоставленный (Twitter), не приводит к отмене навигации. – toby1kenobi

+0

Хорошо .. прошу проверить это –

2

Я знаю, что этот вопрос от еще в июле, но в случае, если кто-то приходит через это я только что пережил то же самое при создании ссылки с onclick атрибутом, который открывает всплывающее окно , Похоже, потому что мы также включаем platform.twitter.com/widgets.js, этот файл widgets.js содержит код для запуска всплывающего окна. Я удалил onclick, и всплывающее окно все еще создано (только с обычной ссылкой <a>). Это всего лишь обходной путь, но он решает проблему. Теперь я просто пытаюсь выяснить, есть ли способ отключить функциональность open.window от widgets.js.

-1

Проблема вызвана кодом widget.js, добавив второе намерение с original_referer=, добавленным к вашим запрошенным намерениям и presto 2 по цене одного.

https://twitter.com/intent/user?screen_name= & 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("?")?"?":"&")} 

Другими словами ваш добавленным код дублирует Intent всплывал функциональность кода уже включенный в widget.js

+0

ответ кажется правильным, но я понятия не имею, какой код вы включили в '{function r (t) ....}'. Я думаю, именно поэтому кто-то остановил вас ... рядом, теперь я замечаю, просто отправляю ответ, который уже здесь. –