Я создаю виджет JavaScript, который должен загружаться асинхронно.
Проблема в том, что на странице может быть более одного из этих виджетов и что виджет должен быть инициализирован путем отправки ему массива параметров через {}.
Каков наилучший способ сделать это?Я слышал, что простая настройка onload или onreadystatechange работает не во всех браузерах.
Я проверил виджет digg, но я не могу понять, что они делают, может кто-нибудь взглянуть на это?
Вот некоторые из их кода:
(function () {
var s, s1, diggWidget = {
id: "digg-widget-1282651415272",
width: 300,
display: "tabbed"
};
if (window.DiggWidget) {
if (typeof DiggWidget == 'function') {
new DiggWidget(diggWidget);
} else {
DiggWidget.push(diggWidget);
}
} else {
DiggWidget = [diggWidget];
s = document.createElement('SCRIPT');
s.type = 'text/javascript';
s.async = true;
s.src = 'http://widgets.digg.com/widgets.js';
s1 = document.getElementsByTagName('SCRIPT')[0];
s1.parentNode.insertBefore(s, s1);
}
})();
Итак, если DiggWidget уже доступен (загружен ранее из-за нескольких экземпляров), он создает новый виджет, если DiggWidget является функцией, в противном случаеDiggWidget используется в качестве массива, и текущие настройки помещаются в него.
Во-первых, зачем DiggWidget быть функцией?
Если виджет является единственным (или первым), тег сценария добавляется асинхронно, обратные вызовы не определяются.
Затем, глядя на widgets.js, они делают это:
Вверху:
(function () {
var A;
if (window.DiggWidget) {
if (typeof DiggWidget != "function") {
A = DiggWidget
} else {
return
}
}
Внизу:
if (A) {
while (A.length) {
new DiggWidget(A.shift())
}
}
Теперь я невполне понимаю это.Доступен ли DiggWidget (массив) для этого .js?Это в анонимной функции.Так что, если я включу такой скрипт дважды, не будет ли DiggWidget каждый раз новым экземпляром?
Или я совершенно не прав в этом?Извините если так.Если есть более эффективные методы для обратного вызова с несколькими экземплярами сценария, пожалуйста, сообщите.