, когда мы используем эту строку open(filename, "a")
, a
указывает на добавление файла, что означает возможность вставки дополнительных данных в существующий файл.
Вы можете просто использовать следующие строки для добавления текст в вашем файле
def FileSave(filename,content):
with open(filename, "a") as myfile:
myfile.write(content)
FileSave("test.txt","test1 \n")
FileSave("test.txt","test2 \n")
Теперь это можно сделать в 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.
let stateObject = { foo: "bar" };
history.pushState(stateObject, "page 2", "newpage.html");
Вы можете увидеть здесь Обновить URL браузера без перезагрузки страницы