Добавить параметр в $ .getScript - PullRequest
0 голосов
/ 17 октября 2019

У меня есть внешний JavaScript для вызова, как это:

<script type="text/javascript" src="https://ndd.com/script.js" data-goal="12345"></script>

Согласно getScript, вызов будет:

$.getScript("https://ndd.com/script.js", function(data, textStatus, jqxhr) {
  console.log(data); // Data returned
  console.log(textStatus); // Success
  console.log(jqxhr.status); // 200
  console.log("Load was performed.");
});

Кстати, я не нахожулюбая информация о том, как передать параметр data-goal.

Я не могу использовать стандартный способ (добавить первый пример JavaScript) в своем коде, и его нужно вызывать из файла JavaScript.

Любая подсказка?

РЕДАКТИРОВАТЬ: Для информации, Javascript вызывается, но не выполняется. Единственный способ, которым это работает, является следующим:

var tagString ='<script type="text/javascript" src="https://ndd.com/script.js" data-goal="12345"></script>';
eval($('').find("script").text());
var range = document.createRange();
range.selectNode(document.getElementsByTagName("BODY")[0]);
var documentFragment = range.createContextualFragment(tagString);
document.body.appendChild(documentFragment);

Ответы [ 2 ]

1 голос
/ 17 октября 2019

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

var script = document.createElement('script');
script.onload = function()
{
  // This proves that jQuery has been dynamically loaded and executed by browsers:
  console.log("jQuery has loaded with the following version: " + jQuery.fn.jquery);
  
  // This proves that the script tag contains a data-goal attribute
  console.log(document.body.innerHTML);
};
script.dataset.goal = 12345;
script.src = 'https://code.jquery.com/jquery-3.4.1.min.js';
document.body.appendChild(script);

Как уже упоминал Адасско, есть хорошие вопросы SO, объясняющие, почему для добавления скриптов вручную рекомендуется использовать vanilla JS вместо jQuery:

Невозможно добавить элемент

0 голосов
/ 17 октября 2019

Вопрос в том, как скрипт получает данные из этого атрибута data-.... Вероятно, он перебирает все элементы script и сравнивает src. Единственный способ передать эти данные - добавить тег скрипта в DOM. Вы можете использовать этот код:

Как добавить в javascript?

, чтобы добавить data-... тегов, которые вы просто используете

script.dataset.goal = 12345;

или вы можете указать его при создании с помощью jQuery:

var s = $('<script type="text/javascript" src="https://ndd.com/script.js" data-goal="12345"></script>');
$('head').append(s);

(таким образом, сценарий не будет оценен)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...