Есть ли способ изменить атрибуты тега <html> во время выполнения?
Я хочу добавить атрибут манифеста во время выполнения, чтобы я мог контролировать, когда будет загружен Appcache.
Пример: когда пользователь правильно вошел в приложение,
<html>
// page content
</html>
меняется на:
<html manifest="myapp.manifest">
// page content
</html>
Есть ли в любом случае я могу добиться этого с помощью JavaScript, JQuery или что-нибудь? Я хочу контролировать, когда Appcache будет загружен условно (я уже читал о том, что внутри iFrame есть другой html).
6 ответов
Согласно спецификации, изменение manifest
Атрибут после загрузки документа не имеет никакого эффекта.
Вы все еще можете получить доступ к html
элемент и изменить значение атрибута, с помощью document.documentElement
:
document.documentElement.setAttribute('manifest', 'myapp.manifest');
Это просто ничего не сделает.
Вы можете использовать .attr ():
Получить значение атрибута для первого элемента в наборе соответствующих элементов или установить один или несколько атрибутов для каждого соответствующего элемента.
$('html').attr('manifest','myapp.manifest');
Можно использовать обычные способы добавления атрибута к элементу, например
document.documentElement.setAttribute('manifest', 'foo.appcache');
(Как указывает @FelixKing в комментарии, присваивая document.documentElement.manifest
не работает, по спецификациям, так как manifest
не определено в DOM. Сначала меня ввели в заблуждение поведение Chrome в этом выпуске.)
Однако это не имеет никакого эффекта. HTML5 CR говорит: "Атрибут манифеста влияет только на ранних этапах загрузки документа. Таким образом, динамическое изменение атрибута не имеет никакого эффекта (и, следовательно, API-интерфейс DOM для этого атрибута не предусмотрен) ".
(Ну, это имеет эффект присутствия, так что вы можете использовать атрибут в стилизации, получить значение атрибута и т. Д. Но ничего, что могло бы вызвать операции кеширования приложения.)
Попробуй это:
document.documentElement.setAttribute('manifest', 'myapp.manifest');
Из документов:
document.documentElement
Возвращает элемент, являющийся корневым элементом документа (например, элемент для документов HTML).
Попробуйте это с помощью jQuery.
$('html').attr('manifest', 'myapp.manifest');
Может оказаться невозможным эффективно добавить атрибут manifest, но возможно удалить его, и тем самым вы сможете достичь того же результата.
Чтобы отключить appcache, я использую это:
window.console.warn('removing appcache');
window.document.documentElement.removeAttribute('manifest');
Пожалуйста, будьте осторожны, это не всегда работает!