Есть ли способ изменить атрибуты тега <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');

Пожалуйста, будьте осторожны, это не всегда работает!

Другие вопросы по тегам