Я отвечаю на вопрос: Как получить значение переменной, учитывая ее имя в строке? , которая закрыта как дубликат со ссылкой на этот вопрос.
Если рассматриваемые переменные являются частью объекта (например, части класса), то некоторые полезные функции для достижения именно этого: hasattr
, getattr
и setattr
.
Так, например, вы можете иметь:
class Variables(object):
def __init__(self):
self.foo = "initial_variable"
def create_new_var(self,name,value):
setattr(self,name,value)
def get_var(self,name):
if hasattr(self,name):
return getattr(self,name)
else:
raise("Class does not have a variable named: "+name)
Тогда вы можете сделать:
v = Variables()
v.get_var("foo")
"initial_variable"
v.create_new_var(v.foo,"is actually not initial") v.initial_variable
"на самом деле не является начальным"
blockquote>
Теперь это можно сделать в Chrome, Safari, FF4 + и IE10pp4 +!
См. ответ этого вопроса для получения дополнительной информации: Обновление адресной строки с новым URL-адресом без хэша или перезагрузка страницы
Пример:
function processAjaxData(response, urlPath){
document.getElementById("content").innerHTML = response.html;
document.title = response.pageTitle;
window.history.pushState({"html":response.html,"pageTitle":response.pageTitle},"", urlPath);
}
Затем вы можете использовать window.onpopstate
для поиска навигации по кнопке назад / вперед:
window.onpopstate = function(e){
if(e.state){
document.getElementById("content").innerHTML = e.state.html;
document.title = e.state.pageTitle;
}
};
Более подробный обзор манипулирования историей браузера см. В этой статье MDN .
В современных браузерах и HTML5 в окне history
есть метод под названием pushState
. Это изменит URL-адрес и перенесет его в историю без загрузки страницы.
Вы можете использовать его следующим образом: он будет принимать 3 параметра: 1) объект состояния 2) название и URL-адрес):
window.history.pushState({page: "another"}, "another page", "example.html");
Это изменит URL-адрес, но не перезагрузит страницу, также не будет проверять, существует ли страница, поэтому, если вы используете какой-либо код javascript, который будет реагировать на URL-адрес, вы можете работать с ними следующим образом .
Также есть history.replaceState()
, который делает точно то же самое, за исключением того, что он изменит текущую историю вместо создания нового!
Также вы можете создать функцию для проверки если существует history.pushState, а затем продолжайте с остальными:
function goTo(page, title, url) {
if ("undefined" !== typeof history.pushState) {
history.pushState({page: page}, title, url);
} else {
window.location.assign(url);
}
}
goTo("another page", "example", 'example.html');
Также вы можете изменить #
для <HTML5 browsers
, который не перезагрузит страницу, вот как Angular
использовать SPA
в соответствии с hashtag ...
Изменить #
довольно легко, делая:
window.location.hash = "example";
, и вы можете обнаружить его следующим образом:
window.onhashchange = function () {
console.log("#changed", window.location.hash);
}
window.onhashchange
и window.onpopstate
делать то же самое в этом случае?
– J0ANMM
17 July 2018 в 11:54
Как указано Thomas Stjernegaard Jeppesen, вы можете использовать History.js для изменения параметров URL, пока пользователь перебирает ваши ссылки и приложения Ajax.
С тех пор прошло почти год, и History.js рос и стал более стабильным и кросс-браузерным. Теперь его можно использовать для управления состояниями истории в HTML5-совместимом, а также во многих браузерах с поддержкой HTML4. В этой демонстрации Вы можете увидеть пример того, как это работает (а также возможность попробовать свои функциональные возможности и ограничения.
Если вам нужна помощь в использовании и реализации эта библиотека, я предлагаю вам взглянуть на исходный код демонстрационной страницы: вы увидите, что это очень легко сделать.
Наконец, для подробного объяснения того, какие могут быть проблемы с использованием хэшей (и hashbangs), проверьте эту ссылку Бенджамина Луптона.
Вы также можете использовать HTML5 replaceState, если хотите изменить URL-адрес, но не хотите добавлять запись в историю браузера:
if (window.history.replaceState) {
//prevents browser from storing history with each change:
window.history.replaceState(statedata, title, url);
}
Это «сломало» функциональность кнопки «Назад». Это может потребоваться в некоторых случаях, например, в галерее изображений (где вы хотите, чтобы обратная кнопка возвращалась обратно на индексную страницу галереи, вместо того чтобы перемещаться по каждому просматриваемому вами изображению), предоставляя каждому изображению свой собственный уникальный URL.
Любые изменения loction (либо window.location
или document.location
) вызовут запрос на этот новый URL-адрес, если вы не просто изменяете фрагмент URL-адреса. Если вы измените URL-адрес, вы измените URL-адрес.
Используйте методы перезаписи URL-адреса на стороне сервера, такие как mod_rewrite от Apache , если вам не нравятся используемые вами URL-адреса.
Вот мое решение: (newUrl - ваш новый URL-адрес, который вы хотите заменить текущим)
history.pushState({}, null, newUrl);
Предполагая, что вы не пытаетесь сделать что-то злонамеренное, все, что вы хотели бы сделать с вашими собственными URL-адресами, может быть запущено с помощью htaccess .
Используйте window.history.pushState("object or string", "Title", "/new-url")
, но он по-прежнему отправляет новый запрос url на сервер
pushState
упоминается только 14 раз в других ответах!
– Nathan Tuggy
13 July 2017 в 04:26
В HTML5 были введены методы history.pushState()
и history.replaceState()
, которые позволяют добавлять и изменять записи истории соответственно.
window.history.pushState('page2', 'Title', '/page2.php');
Подробнее об этом от здесь
file:///
по соображениям безопасности, например. Firefox 30. Проверьте localhost
на python -m SimpleHTTPServer
.
– Ciro Santilli 新疆改造中心 六四事件 法轮功
9 July 2014 в 17:05
До HTML5 мы можем использовать:
parent.location.hash = "hello";
и:
window.location.replace("http:www.example.com");
Этот метод перезагрузит вашу страницу, но HTML5 представил history.pushState(page, caption, replace_url)
, который не должен перезагружать ваши стр.
history.pushState(..)
заключается в том, что если вы хотите перенаправить на другой домен, применяется политика перекрестного домена. В то время как с window.location.replace(..)
возможно перенаправление на другой домен.
– OSWorX
12 May 2018 в 09:00
Используйте history.pushState()
из HTML 5 History API
обратитесь к ссылке для более подробной информации API истории HTML5
Если то, что вы пытаетесь сделать, это позволить пользователям добавлять закладки / обмениваться страницами, и вам не нужно, чтобы это был именно правильный URL-адрес, и вы не используете хеш-привязки для чего-либо еще, тогда вы можете сделать это в двух частях; вы используете обсуждаемое выше location.hash, а затем реализуете проверку на домашней странице, чтобы искать URL-адрес с хеш-якорем в нем и перенаправлять вас на последующий результат.
Например:
1) Пользователь находится на www.site.com/section/page/4
2) Пользователь выполняет какое-либо действие, которое изменяет URL-адрес на www.site.com/#/section/page/6
(с хешем). Скажем, что вы загрузили правильный контент для страницы 6 на страницу, поэтому помимо хэша пользователь не слишком беспокоится.
3) Пользователь передает этот URL кому-то другому или заносит в закладки
4) Кто-то другой или тот же пользователь в более поздний срок переходит к www.site.com/#/section/page/6
5) Код на www.site.com/
перенаправляет пользователя на www.site.com/section/page/6
, используя что-то вроде этого :
if (window.location.hash.length > 0){
window.location = window.location.hash.substring(1);
}
Надеюсь, это имеет смысл! Это полезный подход для некоторых ситуаций.
Возможно, без использования хэшей, посмотрите на asual jQuery Address plugin :
Пример здесь .
Обратите внимание, что он будет использовать хэши в IE, для этого нет обходного пути.
Вы можете добавить метки привязки. Я использую это на своем сайте http://www.piano-chords.net/ , чтобы отслеживать с помощью Google Analytics, что люди посещают на странице. Я просто добавляю тег привязки, а затем часть страницы, которую я хочу отслеживать.
var trackCode = "/#" + urlencode($("myDiv").text());
window.location.href = "http://www.piano-chords.net" + trackCode;
pageTracker._trackPageview(trackCode);
Ниже приведена функция изменения URL-адреса без перезагрузки страницы. Он поддерживает только HTML5
function ChangeUrl(page, url) {
if (typeof (history.pushState) != "undefined") {
var obj = {Page: page, Url: url};
history.pushState(obj, obj.Page, obj.Url);
} else {
window.location.href = "homePage";
// alert("Browser does not support HTML5.");
}
}
ChangeUrl('Page1', 'homePage');
HTML5 replaceState - это ответ, как уже упоминалось Vivart и geo1701. Однако он не поддерживается во всех браузерах / версиях. History.js обертывает функции состояния HTML5 и предоставляет дополнительную поддержку для браузеров HTML4.
Thread.getStackTrace()
[g1] Вы можете увидеть здесь [g0] Обновить URL браузера без перезагрузки страницы [/g0] [/g1] list_1=range(0,100)
list_2=range(0,100,5)
final_list=[]
for i in list_1:
for j in list_2:
if i==j:
final_list.append(i)
print(set(final_list))
, вам следует игнорировать этот ответ. Теперь это возможно, как видно из других ответов. [/G0] [g1] Невозможно изменить [f2] в браузере без перезагрузки страницы. URL-адрес представляет собой последнюю загруженную страницу. Если вы измените его ([f3]), он перезагрузит страницу. [/G1] [g2] Одной из очевидных причин является то, что вы пишете сайт на [f4], который выглядит как страница входа в банк. Затем вы изменяете строку URL браузера на [f5]. Пользователь будет совершенно не в курсе, что он действительно смотрит на [f6]. [/G2]