Подтвердить что ты не робот

Страница загрузки Javascript

Чтобы перезагрузить страницу без полной перезагрузки всего, что я использую:

window.top.location=window.top.location;

Однако это не работает по какой-либо причине, когда есть якорный текст. В этом случае он ничего не делает, но, скорее всего, он обновляет якорь.

Любое исправление для этого, которое перезагрузит страницу (как указано выше) без перезагрузки кэшированных изображений и скриптов?

4b9b3361

Ответ 1

Попробуйте использовать location.reload(false).

Как говорит MDN, второй параметр является логическим, указывающим, следует ли обходить кеш или нет. false продолжает использовать кеш, как вы хотели.

Ответ 2

icktoofay объясняет обходной путь, поэтому я просто решу этот вопрос:

Однако это не работает по какой-либо причине, когда есть якорный текст. В этом случае он ничего не делает, но, скорее всего, он обновляет якорь.

HTML 5 описывает Location interface, который охватывает назначение document.location.

При вызове метода assign (url) UA должен разрешить аргумент относительно базового URL-адреса записи script, и если это успешно, необходимо перейти в контекст просмотра к указанному URL-адресу.

Таким образом, операция навигации видит только абсолютный URL-адрес, поэтому нет разницы, назначая только фрагмент, и присваивая абсолютный URL-адрес, который совпадает с URL-адресом страницы с фрагментом.

navigate

8 Идентификаторы фрагмента: применить алгоритм парсера URL к абсолютному URL нового ресурса и адрес активного документа просматриваемого контекста просмотра. Если все компоненты результирующих проанализированных URL-адресов, игнорируя любые компоненты фрагмента, идентичны, а новый ресурс должен быть выбран с использованием HTTP GET или эквивалентного, а разобранный URL-адрес нового ресурса имеет фрагмент компонент, который не является нулевым (даже если он пуст), , затем перейдите к идентификатору фрагмента и прервите эти шаги.

Наконец, переход к идентификатору фрагмента говорит

Когда пользовательскому агенту требуется прокрутка к идентификатору фрагмента, он должен либо изменить позицию прокрутки документа, используя прокрутку элемента в алгоритм представления, определенный в спецификации спецификации CSSOM, с установкой соответствия с верхним флагом или выполните некоторые другие действия, чтобы указанная часть документа была обращена на пользователя.

Ответ 3

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

Например,

location.search='?'+Math.random();

Кэширование не обходит, поэтому все элементы страницы будут загружены из кеша, но сама главная страница вынуждена перезагружаться, потому что HTTP требует другого запроса на сервер для каждого уникального значения строки запроса /location.search.

Если ваша страница сама является приложением, которое использует строку запроса (например, file.cgi? param = xyz & param2 = abc...), вам придется добавлять к строке запроса, а не полностью ее заменять:

if (location.search.length > 1)
location.search+='&'+Math.random();
else
location.search='?'+Math.random();

Ответ 4

Я пробовал все это для следующей ситуации: у меня сложная страница с мини-картой, где клиент может сохранять проекты со списками продуктов. Теперь я хотел, чтобы клиент открыл новую страницу для загрузки отчета, сохраняя родительскую страницу неповрежденной с открытым аккордеон и т.д.

Клиенты с IE8, все еще работающие с XP, будут иметь родительскую страницу, искаженную после открытия окна отчета. Программирование было в ASP.NET с кодом VB. Это решение сработало для меня.

Dim proj As String = "<script language=javascript> location.assign('/Projects.aspx');
window.open('Report.aspx?project=" & projid.Text & "&rpt=bill');</script>"
Session.Add("AddCart", idx.ToString("N0"))
Response.Write(proj)

location.assign используется для обновления родительской страницы, в то время как window.open откроет отчет в новом окне.

Переменная сеанса используется для отслеживания того, какая строка аккордеона должна быть открыта. Это обрабатывается в Page_Load

    If Not Page.IsPostBack Then
        LoadProjects()
        If Session("AddCart") IsNot Nothing Then
            Dim idx As Integer = Session("AddCart")
            ProjAccordion.SelectedIndex = idx
            Session.Remove("AddCart")
        ElseIf Session("CopyProj") IsNot Nothing Then
            Dim idx As Integer = Session("CopyProj")
            ProjAccordion.SelectedIndex = idx
            Session.Remove("CopyProj")
        End If
    End If