Как я могу взять обычные большие куски часто используемого исходного кода HTML? - PullRequest
4 голосов
/ 20 июля 2009

Множество страниц, написанных мною для одного из моих веб-проектов, имеют около 144 идентичных строк кода, воспроизводимых в каждом файле. Если я обновлю одну из этих строк, мне придется вернуться через ВСЕ страницы, которые разделяют код, и обновить для каждой страницы. Есть ли простой способ включить HTML из отдельного файла?

А что касается бонусных баллов, так как многие страницы используют этот код, было бы неплохо не загружать его для каждой страницы. Есть ли простой способ сохранить его в кеше браузера или загрузить только раздел «контент» страниц, оставив остальную часть страницы статичной?

Фонтаны Благодарности за любую мудрость в этом.

Mike

Ответы [ 3 ]

3 голосов
/ 20 июля 2009

Я бы порекомендовал прочитать эту статью о том, что включает

2 голосов
/ 20 июля 2009

Чтобы включить HTML из отдельного файла, используйте SSI (Включения на стороне сервера). Однако для этого на сервере должна быть установлена ​​поддержка SSI.

Вы могли бы написать что-то вроде этого в ваших файлах: <!--#include file="included.html" --> и это будет включать файл include.html при доступе к странице.

Чтобы загрузить только содержимое каждой страницы, используйте объект XMLHTTPRequest из JavaScript:

function LoadContent(url)
{
    if (typeof(XMLHttpRequest) == "undefined")
    {
        try
        {
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch(e)
        {
            try
            {
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch(e)
            {
                // fallback for browsers without XMLHttpRequest
                window.location.href = "no-ajax.php?url="+escape(url);
                return;
            }
        }
    }
    else
    {
        xmlhttp = new XMLHttpRequest();
    }
    xmlhttp.open("GET", url, false); // this request will be synchronous (will pause the script)
    xmlhttp.send();
    if(xmlhttp.status > 399) // 1xx, 2xx and 3xx status codes are not errors
    {
        // put error handling here
    }
    document.getElementById("content").innerHTML = xmlhttp.responseText;
}
1 голос
/ 20 июля 2009

Если мы предполагаем, что вы говорите прямых html-страниц без кода сервера (возможность включения asp.net, php или на стороне сервера), то для того, чтобы выполнить как включение, так и кэширование, вам нужно будет использовать iframe.

Каждая из ваших страниц, которые дублируют 144 строки контента, должна заменить его на iframe, например:

<iframe src="pagewithcontent.html"></iframe>

pagewithcontent.html, очевидно, будет тем местом, куда вы перемещаете контент. Браузер соответствующим образом кэширует страницу, чтобы каждая родительская страница просто получала общий контент без повторного запроса.

Здесь есть статья , в которой подробно рассматриваются вопросы, связанные с html, и некоторые методы javascript для этого. Я настоятельно рекомендую против методов javascript.

Мой ответ отражает предположение, что вы ничего не можете сделать на стороне сервера. Тем не менее, безусловно, лучшим решением будет сделать это, если вы можете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...