Можно ли заставить внутренние ссылки работать на HTML-странице, сгенерированной на стороне клиента? - PullRequest
0 голосов
/ 24 сентября 2011

Ситуация: по разным причинам (главным образом, из-за того, что он будет иногда использоваться в ситуациях, когда Интернет недоступен), некоторый JavaScript-насыщенный HTML-код, который я создаю, должен иногда запускаться строго на клиенте сервер не задействован По большей части я смог найти обходные пути, позволяющие сохранять страницы с этого сайта обычными браузерными механизмами «Сохранить страницу как», вставлять все нужные им фрагменты и массировать пути, чтобы ссылаться туда, куда я хочу их (на локальной машине), когда браузер не достаточно умен, чтобы исправить URL (что чаще, чем я мог подумать).

Одна часть, которую я пока не смог решить: каждая главная страница может открыть страницу справки в новой вкладке / окне. Для этого я встраиваю содержимое страницы справки в главную сохраненную страницу. Тогда я могу использовать helpWindow.document.write(helpContent), чтобы открыть это. Проблема: что касается браузера, страница справки заканчивается тем же URL-адресом, что и исходная страница, поэтому я не могу эффективно использовать внутренние ссылки на этой странице: она пытается загрузить главную сохраненную страницу, если вы нажмете один!

Например: <a name="target" /> ... <a href="#target">link</a> на странице справки: если вы нажмете «ссылка», браузер загрузит главную сохраненную страницу, а скорее прокрутит страницу справки.

Мой временный обходной путь заключается в удалении этих ссылок, когда мне приходится работать в этой среде, но я бы наверняка нашел способ заставить их работать. Какие-либо предложения? Предложения могут включать в себя совершенно другой способ открыть страницу справки. Я бы предпочел не использовать iframes, мне бы очень хотелось, чтобы он оставался в отдельной вкладке / окне.

Ответы [ 2 ]

1 голос
/ 24 сентября 2011

Вы можете перейти к закладке с помощью JavaScript с помощью element.scrollIntoView():

function goToBookmark(e)
{
    e = e || window.event;
    if (e.preventDefault)
    {
        e.preventDefault();
    }
    e.returnValue = false;
    var bookmarkName = this.href.replace(/^#/, "");
    var bookmark = document.getElementsByName(bookmarkName)[0];
    if (bookmark)
    {
        bookmark.scrollIntoView();
    }
}
for (var i = 0; i < document.links.length; i++)
{
    var link = document.links[i];
    if (/^#/.test(link.href))
    {
        link.onclick = goToBookmark;
    }
}

Или, если вы используете jQuery:

$("a[href^='#']").click(function(e) {
    e.preventDefault();
    var bookmark = $("a[name=" + this.href.replace(/^#/, "") + "]")[0];
    if (bookmark) {
        bookmark.scrollIntoView();
    }
});
1 голос
/ 24 сентября 2011

Вы должны прочитать это: http://en.wikipedia.org/wiki/Single-page_application

В частности, попробуйте: http://en.wikipedia.org/wiki/TiddlyWiki

(Извините, это не отвечает на ваш вопрос, но если вы его не видели,может быть, вы можете получить идеи от них.)

Редактировать:

Я попробовал это немного, и это действительно странно!Это почти похоже на ошибку для меня.Все ли браузеры делают это?

Решение может состоять в том, чтобы использовать ID вместо A NAME (что, кстати, вы можете / должны делать, даже если хотите связать фрагментом привязки), а затем использовать

document.getElementById(elID).scrollIntoView();

Для перехода к элементу.

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