Не срабатывает $.getScript
Работаю с cms bitrix
при открытии фотографии fancybox, по onclick="shareload();" должно обрабатываться function shareload() { $.getScript('/share.js'); } но работает через раз, после N-го колличества перезагрузки страниц. после "Сбросить кеш" скрипт срабатывает. В чем может быть проблема ? Само событие onclick работает, проверял alert'ом вот код вызываемого скрипта: $(document).ready(function() { e = document.getElementsByTagName('div'); for (var k = 0; k < e.length; k++) { if (e[k].className.indexOf('shareblock') != -1) { if (e[k].getAttribute('data-url') != -1) u = e[k].getAttribute('data-url'); if (e[k].getAttribute('data-title') != -1) t = e[k].getAttribute('data-title'); if (e[k].getAttribute('data-image') != -1) i = e[k].getAttribute('data-image'); if (e[k].getAttribute('data-description') != -1) d = e[k].getAttribute('data-description'); if (e[k].getAttribute('data-path') != -1) f = e[k].getAttribute('data-path'); if (!f) { function path(name) { var sc = document.getElementsByTagName('script'), sr = new RegExp('^(.*/|)(' + name + ')([#?]|$)'); for (var i = 0, scL = sc.length; i < scL; i++) { var m = String(sc[i].src).match(sr); if (m) { if (m[1].match(/^((https?|file)\:\/{2,}|\w:[\/\\])/)) return m[1]; if (m[1].indexOf("/") == 0) return m[1]; b = document.getElementsByTagName('base'); if (b[0] && b[0].href) return b[0].href + m[1]; else return document.location.pathname.match(/(.*[\/\\])/)[0] + m[1]; } } return null; } f = path('share.js'); } if (!u) u = location.href; if (!t) t = document.title; function desc() { var meta = document.getElementsByTagName('meta'); for (var m = 0; m < meta.length; m++) { if (meta[m].name.toLowerCase() == 'description') { return meta[m].content; } } return ''; } if (!d) d = desc(); u = encodeURIComponent(u); t = encodeURIComponent(t); t = t.replace('\'', '%27'); i = encodeURIComponent(i); d = encodeURIComponent(d); d = d.replace('\'', '%27'); var s = new Array( '"#" data-count="twi" onclick="window.open(\'https://twitter.com/intent/tweet?text=' + t + '&url=' + u + '\', \'_blank\', \'scrollbars=0, resizable=1, menubar=0, left=100, top=100, width=550, height=440, toolbar=0, status=0\');return false" title="Добавить в Twitter"' ); var so = new Array ( '"#" data-count="vk" onclick="window.open(\'http://vk.com/share.php?url=' + u + '&title=' + t + '&image='+lnkimg+ '&description=' + d + '\', \'_blank\', \'scrollbars=0, resizable=1, menubar=0, left=100, top=100, width=550, height=440, toolbar=0, status=0\');return false" title="Поделиться В Контакте"' ); var l = ''; for (j = 0; j < s.length; j++) l += '<div class="twbtns"><a rel="nofollow" href=' + s[0] + ' target="_blank"></a></div>'; var lo = ''; for (jo = 0; jo < so.length; jo++) lo += '<div class="vkbtns"><a rel="nofollow" href=' + so[0] + ' target="_blank"></a></div>'; e[k].innerHTML = '<div id="share">' + l + lo +'</span>'; } }; }); |
Ты делаешь это неправильно. Подключай скрипт статично. Код оберни в функцию. И когда нужно - вызывай ее.
|
Но у меня на pc работает всё отлично, а вот на стороннем хостинге косяк...
статично т.е так ? <script type="text/javascript" src="/share.js"></script> а как код обернуть правильно в функцию ? в js function shareload() { e = document.getElementsByTagName('div'); for (var k = 0; k < e.length; k++) { if (e[k].className.indexOf('shareblock') != -1) { if (e[k].getAttribute('data-url') != -1) u = e[k].getAttribute('data-url'); if (e[k].getAttribute('data-title') != -1) t = e[k].getAttribute('data-title'); if (e[k].getAttribute('data-image') != -1) i = e[k].getAttribute('data-image'); if (e[k].getAttribute('data-description') != -1) d = e[k].getAttribute('data-description'); if (e[k].getAttribute('data-path') != -1) f = e[k].getAttribute('data-path'); if (!f) { function path(name) { var sc = document.getElementsByTagName('script'), sr = new RegExp('^(.*/|)(' + name + ')([#?]|$)'); for (var i = 0, scL = sc.length; i < scL; i++) { var m = String(sc[i].src).match(sr); if (m) { if (m[1].match(/^((https?|file)\:\/{2,}|\w:[\/\\])/)) return m[1]; if (m[1].indexOf("/") == 0) return m[1]; b = document.getElementsByTagName('base'); if (b[0] && b[0].href) return b[0].href + m[1]; else return document.location.pathname.match(/(.*[\/\\])/)[0] + m[1]; } } return null; } f = path('share.js'); } if (!u) u = location.href; if (!t) t = document.title; function desc() { var meta = document.getElementsByTagName('meta'); for (var m = 0; m < meta.length; m++) { if (meta[m].name.toLowerCase() == 'description') { return meta[m].content; } } return ''; } if (!d) d = desc(); u = encodeURIComponent(u); t = encodeURIComponent(t); t = t.replace('\'', '%27'); i = encodeURIComponent(i); d = encodeURIComponent(d); d = d.replace('\'', '%27'); var s = new Array( '"#" data-count="twi" onclick="window.open(\'https://twitter.com/intent/tweet?text=' + t + '&url=' + u + '\', \'_blank\', \'scrollbars=0, resizable=1, menubar=0, left=100, top=100, width=550, height=440, toolbar=0, status=0\');return false" title="Добавить в Twitter"' ); var so = new Array ( '"#" data-count="vk" onclick="window.open(\'http://vk.com/share.php?url=' + u + '&title=' + t + '&image='+lnkimg+ '&description=' + d + '\', \'_blank\', \'scrollbars=0, resizable=1, menubar=0, left=100, top=100, width=550, height=440, toolbar=0, status=0\');return false" title="Поделиться В Контакте"' ); var l = ''; for (j = 0; j < s.length; j++) l += '<div class="twbtns"><a rel="nofollow" href=' + s[0] + ' target="_blank"></a></div>'; var lo = ''; for (jo = 0; jo < so.length; jo++) lo += '<div class="vkbtns"><a rel="nofollow" href=' + so[0] + ' target="_blank"></a></div>'; e[k].innerHTML = '<div id="share">' + l + lo +'</span>'; } }; }; --------------------- В таком случае работает не так как нужно. При первом открытии фотографии, скрипт не инициализируется, при перемотке фото, скрипт задействуется, но параметры берет из первого просмотренного фото =( |
Мой вопрос так и остался не решенным =( не знаю что тут сделать можно.
Если я правильно понял совет danik.js, то оно грузится, но не корректно берет информацию =( т.е срабатывает только со второго раза при загрузке страницы, последующие клики работают с 1 раза. |
Часовой пояс GMT +3, время: 03:47. |