Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.09.2013, 15:10
Аспирант
Отправить личное сообщение для dolte Посмотреть профиль Найти все сообщения от dolte
 
Регистрация: 04.09.2013
Сообщений: 37

Не срабатывает $.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>';
        }
    };
});
Ответить с цитированием
  #2 (permalink)  
Старый 10.09.2013, 15:51
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Ты делаешь это неправильно. Подключай скрипт статично. Код оберни в функцию. И когда нужно - вызывай ее.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 10.09.2013, 15:59
Аспирант
Отправить личное сообщение для dolte Посмотреть профиль Найти все сообщения от dolte
 
Регистрация: 04.09.2013
Сообщений: 37

Но у меня на 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>';
        }
    };
};

---------------------

В таком случае работает не так как нужно.
При первом открытии фотографии, скрипт не инициализируется, при перемотке фото, скрипт задействуется, но параметры берет из первого просмотренного фото =(

Последний раз редактировалось dolte, 10.09.2013 в 16:14.
Ответить с цитированием
  #4 (permalink)  
Старый 13.09.2013, 08:49
Аспирант
Отправить личное сообщение для dolte Посмотреть профиль Найти все сообщения от dolte
 
Регистрация: 04.09.2013
Сообщений: 37

Мой вопрос так и остался не решенным =( не знаю что тут сделать можно.

Если я правильно понял совет danik.js, то оно грузится, но не корректно берет информацию =(

т.е срабатывает только со второго раза при загрузке страницы, последующие клики работают с 1 раза.

Последний раз редактировалось dolte, 13.09.2013 в 09:46.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
onclick срабатывает со 2 раза в ie djonA Общие вопросы Javascript 19 24.03.2013 23:07
$('xxx').click(function() срабатывает по разному delias jQuery 2 27.02.2013 20:37
AJAX запрос в Internet Explorer срабатывает через раз nikolayseo jQuery 5 12.11.2012 22:13
Нажатие по дате в календаре срабатывает только со второго клика afr0 Events/DOM/Window 4 31.10.2012 11:39
Не срабатывает обертка фун-и в IE8 zilker Internet Explorer 6 16.07.2012 17:54