Добавить элемент ссылки в DOM

Я пытаюсь добавить сенсорные значки для веб-страницы. Эта страница обрабатывается CMS (LifeRay), и, поскольку у меня нет доступа к шаблонам, я не могу добавить элементы в свой элемент head, изменив шаблон. Таким образом, я подумал, что, возможно, смогу создать элементы в DOM с помощью JavaScript.

Я пробовал это:

var touchIcon57 = document.createElement('link');
touchIcon57.setAttribute('rel', 'apple-touch-icon');
touchIcon57.setAttribute('sizes', '57x57');
touchIcon57.setAttribute('href', 'icon57x57.png');
document.getElementsByTagName('head')[0].appendChild(touchIcon57);

var touchIcon72 = document.createElement('link');
touchIcon72.setAttribute('rel', 'apple-touch-icon');
touchIcon72.setAttribute('sizes', '72x72');
touchIcon72.setAttribute('href', 'icon72x72.png');
document.getElementsByTagName('head')[0].appendChild(touchIcon72);

var touchIcon114 = document.createElement('link');
touchIcon114.setAttribute('rel', 'apple-touch-icon');
touchIcon114.setAttribute('sizes', '114x114');
touchIcon114.setAttribute('href', 'icon114x114.png');
document.getElementsByTagName('head')[0].appendChild(touchIcon114);

var touchIcon144 = document.createElement('link');
touchIcon144.setAttribute('rel', 'apple-touch-icon');
touchIcon144.setAttribute('sizes', '144x144');
touchIcon144.setAttribute('href', 'icon144x114.png');
document.getElementsByTagName('head')[0].appendChild(touchIcon144);

var touchIcon512 = document.createElement('link');
touchIcon512.setAttribute('rel', 'apple-touch-icon');
touchIcon512.setAttribute('sizes', '512x512');
touchIcon512.setAttribute('href', 'icon512x512.png');
document.getElementsByTagName('head')[0].appendChild(touchIcon512);

Это добавляет элементы в мой DOM, но когда я пытаюсь добавить его на свой домашний экран на своем iPhone, значка нет.


person konkretmusik    schedule 23.05.2013    source источник
comment
Вы имеете в виду, что JavaScript не является эффективным или красивым способом добавления элементов в дом, делая то, что вы делаете. Не обвиняйте язык в запахе вашего кода. этот код можно реорганизовать, чтобы он стал намного меньше и проще. Во-первых, используйте массив, во-вторых, используйте объекты для свойств, не используйте setAttribute для таких вещей, где вам не нужно здесь, и добавляйте к телу, а не к голове. Элементы, добавленные к телу, невидимы   -  person Benjamin Gruenbaum    schedule 23.05.2013
comment
Не обвиняйте язык в запахе вашего кода. ПОЛУЧИЛОСЬ!   -  person    schedule 23.05.2013
comment
@BenjaminGruenbaum Я думаю, что большую озабоченность вызывает то, что пользователь говорит, что используемый код (независимо от красоты) на самом деле не делает то, что нужно. Он также не может добавлять элементы ‹link› к телу. Независимо от того, какую CMS вы используете, она должна иметь отдельную область, которая позволит вам редактировать область HEAD, если динамически вводимые сенсорные значки не будут работать. Попробуйте найти это в документации продукта.   -  person 1nfiniti    schedule 23.05.2013
comment
Небольшой рефакторинг приводит к этому. а>   -  person Sushanth --    schedule 23.05.2013
comment
@Sushanth-- Отлично сделано! вот мое решение, предполагая, что это то, что на самом деле хотел OP. jsfiddle.net/3zsH2   -  person Benjamin Gruenbaum    schedule 23.05.2013
comment
@BenjaminGruenbaum, ты вообще знаешь, что такое значок Apple Touch?   -  person 1nfiniti    schedule 23.05.2013
comment
@mikeyUX Да, но это не будет работать на jsfiddle, не так ли? Я попытался создать что-то подобное, чтобы проиллюстрировать это :)   -  person Benjamin Gruenbaum    schedule 23.05.2013
comment
jsfiddle.net/rlemon/YmaRg/5 Я бросил свою шляпу на ринг. обратите внимание на комментарий к атрибуту «размеры»   -  person rlemon    schedule 23.05.2013
comment
@BenjaminGruenbaum Дело в том, что динамически внедряемые элементы ссылки, добавленные в заголовок, не распознаются устройством iOS. Остальное не имеет значения.... Отличная работа, вы сделали его JS чище и эффективнее. Это все еще не делает то, что ему нужно.   -  person 1nfiniti    schedule 23.05.2013
comment
@mikeyUX, поэтому все это происходит в комментариях ;) По крайней мере, мы помогаем   -  person rlemon    schedule 23.05.2013
comment
@rlemon достаточно честно, я полагаю. Хотя я до сих пор не уверен, правда ли это на самом деле ;)   -  person 1nfiniti    schedule 23.05.2013
comment
Звучит как ошибка для меня.   -  person Shmiddty    schedule 23.05.2013
comment
более чистый, быстрый, более читаемый и удобный для сопровождения код — это всегда плюс. предоставление примеров того, как можно улучшить код во всех этих областях, безусловно, помогает, может быть, несвоевременно, но это помощь.   -  person rlemon    schedule 23.05.2013
comment
Кроме того, вы можете попробовать полностью указать свои URL-адреса.   -  person Shmiddty    schedule 23.05.2013
comment
Я согласен с @rlemon ... и это не похоже на то, что это совсем не связано с вопросом, поскольку OP решил использовать вопрос, чтобы пожаловаться на то, что JS не является красивым или эффективным решением. FWIW, мы также можем воспользоваться forEach, чтобы исключить переменную head. jsfiddle.net/YmaRg/6   -  person    schedule 23.05.2013
comment
Конечно, мы можем сказать ОП, как провести рефакторинг для обеспечения удобочитаемости/обслуживаемости. Но большая часть обсуждения в комментариях не имеет отношения к реальному вопросу из-за глупого разглагольствования в вопросе. Я редактирую это.   -  person bfavaretto    schedule 23.05.2013
comment
@konkretmusik, возможно, стоит изучить stackoverflow.com/questions/7885393/   -  person rlemon    schedule 23.05.2013
comment
Разметка выглядит более четкой, однако каждый значок загружается в CMS через базу данных, поэтому каждый URL-адрес выглядит примерно так: domain.com/documents/27618/27691/icon144x144.png/ Таким образом, разметка должна выглядеть немного по-другому, чтобы включить это . В любом случае, кто-нибудь знает, ПОЧЕМУ я не могу использовать этот метод для добавления значков Apple Touch?   -  person konkretmusik    schedule 24.05.2013
comment
@rlemon это не совсем то, о чем я просил.   -  person konkretmusik    schedule 24.05.2013
comment
@konkretmusik как так? Не работает на домашнем экране iOS, и эта проблема связана с одной из (предположительно, нескольких) причин этой ошибки. [Не] действительно то, о чем я просил! == Извините, это была не моя проблема, но спасибо за попытку   -  person rlemon    schedule 24.05.2013
comment
@rlemon Я не был неблагодарным за любую предложенную помощь (извините, если вы восприняли это таким образом), я просто нашел обсуждение немного расплывчатым. В любом случае, я не могу проверить что-либо из различных предложений в этом обсуждении, поскольку я ограничен CMS. Возможно, проблема связана с виртуальным каталогом, предложенным в этом обсуждении, но я еще не прочитал ничего решительного по этому поводу.   -  person konkretmusik    schedule 24.05.2013