Измените URL в браузере, не загружая новую страницу с помощью JavaScript

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

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

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
296
задан random 30 March 2012 в 14:26
поделиться

6 ответов

Настройки безопасности браузера препятствуют тому, чтобы люди изменили отображенный URL непосредственно. Вы могли вообразить уязвимости фишинга, которые вызовут.

Только надежный способ изменить URL, не изменяя страницы состоит в том, чтобы использовать внутреннюю ссылку или хеш. например: http://site.com/page.html становится http://site.com/page.html#item1 . Эта техника часто используется в hijax (Ajax + история заповедника).

При выполнении этого я буду часто просто использовать ссылки для действий с хешем как href, затем добавить события щелчка с jQuery, которые используют требуемый хеш, чтобы определить и делегировать действие.

я надеюсь, что устанавливает Вас на правильном пути.

8
ответ дан Jethro Larson 23 November 2019 в 01:34
поделиться

Я сильно подозревал бы, что это не возможно, потому что это была бы невероятная проблема безопасности, если бы это было. Например, я мог сделать страницу, которая была похожа на страницу входа в систему банка, и сделайте URL во взгляде строки поиска точно так же, как реальный банк !

, Возможно, если Вы объясняете, почему Вы хотите сделать это, люди могли бы быть в состоянии предложить альтернативные подходы...

[Редактирование в 2011: Так как я записал этот ответ в 2008, больше информации обнаружилось относительно техника HTML5 , который позволяет URL быть измененным, пока это от того же источника]

21
ответ дан Paul Dixon 23 November 2019 в 01:34
поделиться

window.location.href содержит текущий URL. Можно читать из него, можно добавить к нему, и можно заменить его, который может вызвать перезагрузку страницы.

, Если, как это походит, Вы хотите записать состояние JavaScript в URL, таким образом, это может быть отмечено, не перезагружая страницу, добавьте его к текущему URL после # и имейте часть JavaScript, инициированного onload синтаксическим анализом события текущий URL, чтобы видеть, содержит ли это сохраненное состояние.

, Если Вы используете a? вместо # Вы вызовете перезагрузку страницы, но так как Вы проанализируете сохраненное состояние на загрузке, это не может на самом деле быть проблемой; и это сделает вперед, и кнопки "Назад" работают правильно также.

37
ответ дан moonshadow 23 November 2019 в 01:34
поделиться

Если Вы хотите, чтобы он работал в браузерах, которые еще не поддерживают history.pushState и history.popState, "старый" путь состоит в том, чтобы установить идентификатор фрагмента, который не вызовет перезагрузку страницы.

основная идея состоит в том, чтобы установить window.location.hash свойство к значению, которое содержит любую информацию состояния, в которой Вы нуждаетесь, тогда или используете window.onhashchange событие , или для более старых браузеров, которые не поддерживают onhashchange (IE < 8, Firefox < 3.6), периодически проверяйте, чтобы видеть, изменил ли хеш (использование setInterval, например) и обновляет страницу. Необходимо будет также проверить, что значение хэш-функции на странице загружается для установки начального содержания.

, Если Вы используете jQuery, существует hashchange плагин , который будет использовать какой бы ни метод поддержка браузера. Я уверен, что существуют плагины для других библиотек также.

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

187
ответ дан Matthew Crumley 23 November 2019 в 01:34
поделиться

Существует компонент YUI Yahoo (менеджер по Истории Браузера), который может обработать это: http://developer.yahoo.com/yui/history/

4
ответ дан powtac 23 November 2019 в 01:34
поделиться

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

Таким образом как скажем, пользователь на уровне страницы: http://domain.com/site/page.html Затем браузер может позволить мне сделать location.append = new.html и страница становится: http://domain.com/site/page.htmlnew.html и браузер не изменяет его.

Или просто позвольте человеку изменяться, получают параметр, поэтому позвольте нам location.get = me=1&page=1.

Таким образом, исходная страница становится http://domain.com/site/page.html?me=1&page=1 и это не обновляется.

Проблема с # состоит в том, что данные не кэшируются (по крайней мере, я не думаю так), когда хеш изменяется. Таким образом, это похоже каждый раз, когда новая страница загружается, тогда как назад - и вперед кнопки на странице не-Ajax могут к данным кэша и не проводят время при перезагрузке данных.

Из того, что я видел, вещь истории Yahoo уже загружает все данные сразу. Это, кажется, не делает запросов Ajax. Таким образом, когда a div используется для обработки другого сверхурочного времени метода, те данные не хранятся для каждого состояния истории.

1
ответ дан Drew Noakes 23 November 2019 в 01:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: