Руководство по устранению неполадок для HTML и JavaScript
Предупреждение
По состоянию на 1 июня 2020 г. платформа Монетизации Microsoft Ad для приложений Windows UWP будет закрыта. Подробнее
В этом разделе содержатся решения распространенных проблем разработки с библиотеками Microsoft Advertising в приложениях JavaScript/HTML.
HTML
AdControl не отображается
Убедитесь, что в Package.appxmanifest выбрана возможность Интернета (клиента ).
Убедитесь, что ссылка на JavaScript присутствует. Без ad.js ссылки в головном <> разделе (после default.js ссылки) adControl не сможет отобразиться и во время сборки возникнет ошибка.
<head> ... <script src="//Microsoft.Advertising.JavaScript/ad.js"></script> ... </head>
Проверьте идентификатор приложения и идентификатор рекламного блока. Эти идентификаторы должны соответствовать идентификатору приложения и идентификатору рекламного блока, полученным в Центре партнеров. Дополнительные сведения см. в разделе "Настройка рекламных блоков" в приложении.
<div id="myAd" style="position: absolute; top: 50px; left: 0px; width: 250px; height: 250px; z-index: 1" data-win-control="MicrosoftNSJS.Advertising.AdControl" data-win-options="{applicationId: 'ApplicationID', adUnitId: 'AdUnitID'}"> </div>
Проверьте свойства высоты и ширины. Они должны быть установлены в одном из поддерживаемых размеров рекламы для баннеров.
<div id="myAd" style="position: absolute; top: 50px; left: 0px; width: 250px; height: 250px; z-index: 1" data-win-control="MicrosoftNSJS.Advertising.AdControl" data-win-options="{applicationId: 'ApplicationID', adUnitId: 'AdUnitID'}"> </div>
Проверьте расположение элементов. AdControl должен находиться в области просмотра.
Проверьте свойство видимости. Это свойство не должно быть установлено как свернутое или скрытое. Это свойство можно задать встроенным (как показано ниже) или во внешней таблице стилей.
<div id="myAd" style="visibility: visible; position: absolute; top: 1025px; left: 500px; width: 250px; height: 250px; z-index: 1" data-win-control="MicrosoftNSJS.Advertising.AdControl" data-win-options="{applicationId: 'ApplicationID', adUnitId: 'AdUnitID'}"> </div>
Проверьте свойство позиции. Свойство position должно быть задано соответствующим значением в зависимости от других свойств элемента (например, полей в родительском элементе и z-index). Это свойство можно задать встроенным (как показано ниже) или во внешней таблице стилей.
<div id="myAd" style="visibility: visible; position: absolute; top: 1025px; left: 500px; width: 250px; height: 250px; z-index: 1" data-win-control="MicrosoftNSJS.Advertising.AdControl" data-win-options="{applicationId: 'ApplicationID', adUnitId: 'AdUnitID'}"> </div>
Проверьте свойство z-index. Свойство z-index должно быть установлено достаточно высоким, поэтому AdControl всегда отображается на вершине других элементов. Это свойство можно задать встроенным (как показано ниже) или во внешней таблице стилей.
<div id="myAd" style="visibility: visible; position: absolute; top: 1025px; left: 500px; width: 250px; height: 250px; z-index: 1" data-win-control="MicrosoftNSJS.Advertising.AdControl" data-win-options="{applicationId: 'ApplicationID', adUnitId: 'AdUnitID'}"> </div>
Проверьте внешние таблицы стилей. Если свойства задаются в элементе AdControl через внешнюю таблицу стилей, убедитесь, что все указанные выше свойства заданы правильно.
<div id="myAd" style="visibility: visible; position: absolute; top: 1025px; left: 500px; width: 250px; height: 250px; z-index: 1" data-win-control="MicrosoftNSJS.Advertising.AdControl" data-win-options="{applicationId: 'ApplicationID', adUnitId: 'AdUnitID'}"> </div>
Проверьте родительский элемент AdControl. Если AdControl находится в родительском элементе, родительский элемент должен быть активным и видимым.
<div style="position: absolute; width: 500px; height: 500px;"> <div id="myAd" style="position: relative; top: 0px; left: 100px; width: 250px; height: 250px; z-index: 1" data-win-control="MicrosoftNSJS.Advertising.AdControl" data-win-options="{applicationId: 'ApplicationID', adUnitId: 'AdUnitID'}"> </div> </div>
Убедитесь, что AdControl не скрыт из окна просмотра. AdControl должен быть видимым для правильной отображения рекламы.
Динамические значения для ApplicationId и AdUnitId не должны проверяться в эмуляторе. Чтобы убедиться, что AdControl работает должным образом, используйте тестовые значения для ApplicationId и AdUnitId.
Черный ящик мигает и исчезает
Дважды проверьте все шаги, описанные в предыдущем разделе AdControl, не отображаемом .
Обработайте событие onErrorOccurred и используйте сообщение, переданное обработчику событий, чтобы определить, произошла ли ошибка и какой тип ошибки был вызван. Дополнительные сведения см. в пошаговом руководстве по обработке ошибок в JavaScript.
<div id="myAd" style="position: absolute; top: 0px; left: 0px; width: 728px; height: 90px; z-index: 1" data-win-control="MicrosoftNSJS.Advertising.AdControl" data-win-options="{applicationId: 'ApplicationID', adUnitId: 'AdUnitID', onErrorOccurred: errorLogger}"> </div> <div style="position:absolute; width:100%; height:130px; top:300px; left:0px"> <b>Ad Events</b><br /> <div id="adEvents" style="width:100%; height:110px; overflow:auto"></div> </div>
Наиболее распространенная ошибка, которая приводит к черному ящику, — "Объявление недоступно". Эта ошибка означает, что объявление не доступно для возврата из запроса.
AdControl работает нормально. По умолчанию AdControl будет свернут, когда не удается отобразить объявление. Если другие элементы являются дочерними элементами одного родительского элемента, они могут переместиться, чтобы заполнить пробел свернутого AdControl и развернуть при выполнении следующего запроса.
Реклама не обновляется
Проверьте свойство isAutoRefreshEnabled. По умолчанию это необязательное свойство имеет значение true. Если задано значение false, метод обновления должен использоваться для получения другого объявления.
<div id="myAd" style="position: absolute; top: 0px; left: 0px; width: 250px; height: 250px; z-index: 1" data-win-control="MicrosoftNSJS.Advertising.AdControl" data-win-options="{ applicationId: 'ApplicationID', adUnitId: 'AdUnitID', onErrorOccurred: errorLogger, isAutoRefreshEnabled: true}"> </div>
Проверьте вызовы метода обновления . При использовании автоматического обновления обновление нельзя использовать для получения другого объявления. При использовании обновления вручную обновление должно вызываться только через 30–60 секунд в зависимости от текущего подключения к данным устройства.
В этом примере показано, как использовать метод обновления . В следующем html-коде показан пример создания экземпляра AdControl с параметром IsAutoRefreshEnabled , равным false.
<div id="myAd" style="position: absolute; top: 0px; left: 0px; width: 250px; height: 250px; z-index: 1" data-win-control="MicrosoftNSJS.Advertising.AdControl" data-win-options="{ applicationId: 'ApplicationID', adUnitId: 'AdUnitID', onErrorOccurred: errorLogger, isAutoRefreshEnabled: false}"> </div>
В этом примере показано, как использовать функцию обновления .
args.setPromise(WinJS.UI.processAll() .then(function (args) { window.setInterval(function() { document.getElementById("myAd").winControl.refresh(); }, 60000) }) );
AdControl работает нормально. Иногда одна и та же реклама будет отображаться несколько раз в строке, давая вид, что реклама не обновляется.
JavaScript
AdControl не отображается
Убедитесь, что в Package.appxmanifest выбрана возможность Интернета (клиента ).
Убедитесь, что adControl создается экземпляром. Если adControl не создается. он не будет доступен.
В следующих фрагментах кода показан пример создания экземпляра AdControl. В этом HTML-коде показан пример настройки пользовательского интерфейса для AdControl
<div id="myAd" style="position: absolute; top: 0px; left: 0px; width: 250px; height: 250px; z-index: 1" data-win-control="MicrosoftNSJS.Advertising.AdControl"> </div>
В следующем коде JavaScript показан пример создания экземпляра AdControl
app.onactivated = function (args) { if (args.detail.kind === activation.ActivationKind.launch) { if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) { var adDiv = document.getElementById("myAd"); var myAdControl = new MicrosoftNSJS.Advertising.AdControl(adDiv, { applicationId: "{ApplicationID}", adUnitId: "{AdUnitID}" }); myAdControl.onErrorOccurred = myAdError; } else { ... } } }
Проверьте родительский элемент. Родительский <div> должен быть правильно назначен, активен и видим.
var adDiv = document.getElementById("myAd"); var myAdControl = new MicrosoftNSJS.Advertising.AdControl(adDiv, { applicationId: "{ApplicationID}", adUnitId: "{AdUnitID}" });
Проверьте идентификатор приложения и идентификатор рекламного блока. Эти идентификаторы должны соответствовать идентификатору приложения и идентификатору рекламного блока, полученным в Центре партнеров. Дополнительные сведения см. в разделе "Настройка рекламных блоков" в приложении.
var myAdControl = new MicrosoftNSJS.Advertising.AdControl(adDiv, { applicationId: "{ApplicationID}", adUnitId: "{AdUnitID}" });
Проверьте родительский элемент AdControl. Родительский элемент должен быть активным и видимым.
Динамические значения для ApplicationId и AdUnitId не должны проверяться в эмуляторе. Чтобы убедиться, что AdControl работает должным образом, используйте тестовые значения для ApplicationId и AdUnitId.
Черный ящик мигает и исчезает
Дважды проверьте все шаги в разделе AdControl, не отображающемся .
Обработайте событие onErrorOccurred и используйте сообщение, переданное обработчику событий, чтобы определить, произошла ли ошибка и какой тип ошибки был вызван. Дополнительные сведения см. в пошаговом руководстве по обработке ошибок в JavaScript.
В этом примере показано, как реализовать обработчик ошибок, который сообщает об ошибках. Этот фрагмент КОДА HTML содержит пример настройки пользовательского интерфейса для отображения сообщений об ошибках.
<div style="position:absolute; width:100%; height:130px; top:300px"> <b>Ad Events</b><br /> <div id="adEvents" style="width:100%; height:110px; overflow:auto"></div> </div>
В этом примере показано, как создать экземпляр AdControl. Эта функция будет вставлена в файл app.onactivated.
var myAdControl = new MicrosoftNSJS.Advertising.AdControl(adDiv, { applicationId: "{ApplicationID}", adUnitId: "{AdUnitID}" }); myAdControl.onErrorOccurred = myAdError;
В этом примере показано, как сообщать об ошибках. Эта функция будет вставлена под самозапустивщейся функцией в файле default.js.
WinJS.Utilities.markSupportedForProcessing ( window.errorLogger = function (sender, evt) { adEvents.innerHTML = (new Date()).toLocaleTimeString() + ": " + sender.element.id + " error: " + evt.errorMessage + " error code: " + evt.errorCode + "<br>" + adEvents.innerHTML; } );
Наиболее распространенная ошибка, которая приводит к черному ящику, — "Объявление недоступно". Эта ошибка означает, что объявление не доступно для возврата из запроса.
AdControl работает нормально. Иногда одна и та же реклама будет отображаться несколько раз в строке, давая вид, что реклама не обновляется.
Реклама не обновляется
Проверьте, имеет ли свойство IsAutoRefreshEnabled для adControl значение false. По умолчанию это необязательное свойство имеет значение true. Если задано значение false, метод Refresh должен использоваться для получения другого объявления.
Проверьте вызовы метода Refresh . При использовании автоматического обновления (IsAutoRefreshEnabled имеет значение true), обновление нельзя использовать для получения другого объявления. При использовании ручного обновления (IsAutoRefreshEnabled имеет значение false), обновление должно вызываться только через 30–60 секунд в зависимости от текущего подключения к данным устройства.
В этом примере показано, как создать div для AdControl.
<div id="myAd" style="position: absolute; top: 0px; left: 0px; width: 250px; height: 250px; z-index: 1" data-win-control="MicrosoftNSJS.Advertising.AdControl"> </div>
В этом примере показано, как использовать функцию Refresh
var myAdControl = new MicrosoftNSJS.Advertising.AdControl(adDiv, { applicationId: "{ApplicationID}", adUnitId: "{AdUnitID}", isAutoRefreshEnabled: false }); ... args.setPromise(WinJS.UI.processAll() .then(function (args) { window.setInterval(function() { document.getElementById("myAd").winControl.refresh(); }, 60000) }) );
AdControl работает нормально. Иногда одна и та же реклама будет отображаться несколько раз в строке, давая вид, что реклама не обновляется.