2015-08-18 2 views
0

Включая сценарий статически в HTML, как один ниже работы:Невозможно прочитать атрибут DOM из сценария загружается динамически

<script type="text/javascript" src="http://meerkatapp.co/widgets/embed.js" data-mute="false" data-social="false" data-cover="default" data-type="square" data-username="jessicadelfino"></script> 

Однако, ссылаясь на сценарий динамически не работает.

JavaScript код:

// Create script object 
    var script = document.createElement("script"); 

    // Configure script with Meerkat data 
    script.type = "text/javascript"; 
    script.src = "http://meerkatapp.co/widgets/embed.js"; 
    script.setAttribute("data-mute", "false"); 
    script.setAttribute("data-social", "false"); 
    script.setAttribute("data-cover", "default"); 
    script.setAttribute("data-type", "square"); 
    script.setAttribute("data-username", "jessicadelfino"); 

    // Append script object 
    $("body").append(script); 

Вот где происходит ошибка (от http://meerkatapp.co/widgets/embed.js):

window.currentScript = document.currentScript || (function() { 
    var scripts = document.getElementsByTagName('script'); 
    return scripts[scripts.length - 1]; 
})(); 

main(window.currentScript) 

function main(currentScript) { 
     ... 
     var btnContainerElm = currentScript 
     var mkBtnUsername = btnContainerElm.getAttribute("data-username") 
     ... 
     mkBtnUsername = mkBtnUsername.replace("@", '') 

Этот код генерирует ошибку: Uncaught TypeError: Cannot read property 'replace' of null на линии mkBtnUsername = mkBtnUsername.replace("@", '').

Ясно mkBtnUsername не если атрибут data-username установлен в скрипте.

+0

Где именно находится пользователь? Пожалуйста, покажи нам все. – Script47

+0

@ user2864740 Да, пожалуйста, прочитайте вопрос. Он имеет значение null, но проблема в том, что код работает отлично, когда он сделан статически, поэтому почему имя пользователя появляется как «null». – Crashalot

+0

@ Script47 Имя пользователя задано в последней строке перед добавлением сценария в тело. Спасибо за вопрос. – Crashalot

ответ

1

Моя догадка document.currentScript вероятно нулевой (это может произойти, если это свойство проверяется внутри обработчика события, скажем, $(document).ready), и ваша функция запасного варианта выбирает неправильный скрипт (scripts[scripts.length - 1]). Попробуйте войти в систему window.currentScript.

Смежные вопросы