04.03.2016, 23:40
|
Аспирант
|
|
Регистрация: 28.06.2014
Сообщений: 55
|
|
Как передать переменную из одной вкладки браузера в другую?
То есть, в браузере открыто две вкладки с двумя разными, моими, сайтами и надо передать текст на другую вкладку. Как можно передать?
Последний раз редактировалось милт, 05.03.2016 в 00:01.
|
|
05.03.2016, 00:34
|
Аспирант
|
|
Регистрация: 28.06.2014
Сообщений: 55
|
|
Всё, я уже понял как это сделать. Можно сохранять куки для любого домена. Например так
$.cookie('cookie', 'cookie_value', {
domain: ''
});
|
|
05.03.2016, 09:35
|
Аспирант
|
|
Регистрация: 28.06.2014
Сообщений: 55
|
|
Чёрт. Не знаю почему, но почему-то уже не работает способ который написан выше. То есть для отдельных сайтов сохраняются отдельные куки, несмотря на то что домен указан пустой. Если не ошибаюсь, немного ранее этот способ работал.
|
|
05.03.2016, 10:17
|
|
Профессор
|
|
Регистрация: 18.05.2011
Сообщений: 1,207
|
|
милт,
юзай кросс-доменные запросы
|
|
05.03.2016, 17:45
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
Сообщение от милт
|
с двумя разными, моими, сайтами и надо передать текст на другую вкладку
|
workers
если сайт один но разные страницы то можно storage
пример https://github.com/Poznakomlus/localstorage
|
|
05.03.2016, 23:15
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Poznakomlus,
Кроссдоменный Вариант:
1. Пишем скрипт для обоих доменов, считывающий window.name во фрейме начинающийся с name="sendMessage=Бла Бла бла"
2. Бла Бла бла во фрейме перезаписываем в Storage к примеру с тем же именем localStorage.sendMessage
По событию изменения Storage(вешаем обработчик на вкладках), - считываем на нужной вкладке ячейку localStorage.sendMessage
3. Когда нужно передать, ставим фрейм с адресом принимающего домена с нужным name и сообщением
Последний раз редактировалось Deff, 05.03.2016 в 23:17.
|
|
06.03.2016, 01:05
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
Deff, не совсем понял зачем name здесь использовать (как работает я знаю)
как по мне вариант с фреймами по сути аналогичен workers
недавно побаловался с фреймами почти как Ajax
|
|
06.03.2016, 01:12
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
function getWorker() {
var blob;
window.URL = window.URL || window.webkitURL || window.mozURL || window.msURL;
var mimeString = 'application/javascript';
var code = "onmessage = function(e) { \
var callback = Function('return ' + e.data[0])();\
postMessage(callback.apply(this, e.data[1])); }";
try {
blob = new Blob([code], {type: mimeString});
} catch (e) {
var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder ||
window.MozBlobBuilder || window.MSBlobBuilder;
var bb = new BlobBuilder();
bb.append(code);
blob = bb.getBlob(mimeString);
}
var url = window.URL.createObjectURL(blob);
var worker = new Worker(url);
URL.revokeObjectURL(url);
return worker;
}
function test(a, b) {
var result = 0;
for (; a < b; a += 1) result += a;
return result;
}
var worker = getWorker();
worker.postMessage([test.toString(), [1, 99999]]);
worker.onmessage = function (e) { alert(e.data);};
worker сами по себе интересная штука. можно и динамически запускать
P.S. Где-то я ошибся для Ie, Edge
Последний раз редактировалось Vlasenko Fedor, 06.03.2016 в 01:48.
|
|
06.03.2016, 02:14
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Poznakomlus,
name фрейма(<iframe name="xxxx">) считывается во фрейме как window.name (весчь древняя и кроссбраузерная, символы кроме кавычек - любые, можно заэнкодить - если данные с кавычками, длина не ограничена, в отличии вставки данных в хешь Url фрейма (тоже возможный метод передачи во фрейм)
Ну фрейм то с другого домена,
А с workers не пробовал междоменный обмен, если конечно не через postMessage
Но postMessage и blob имхо только c 11 версии ИЕ работают (любые ограничения кроссбраузерности убивают часть пользователей на моем ресурсе, 2% - 3% от всех - это десятки тысяч
==================
worker интересен мне был в качестве обмена и отслеживания активных вкладок(и последней активной) с одного домена
Задача возникает для скриптов уведомлений на основе title хидера, дабы не дублировались и уведомляли лишь на последне активной вкладке (Вам Письмо, к примеру, Важно так же если при этом есть и звук, чтобы не было звуков с нескольких вкладок, т.е и для поддержки всяких проигрывателей с автозапуском тоже важно, дабы звуки не дублировались с нескольких открытых вкладок) . Аналогично можно исключать таким методом и comet-запросы на неактивных вкладках. В worker нет ограничений на запуск setTimeout и setInterval на неактивной вкладке (в отличии от скриптов на странице, при неактивной вкладке интервал запуска по-моему становиться не менее секунды)
Последний раз редактировалось Deff, 06.03.2016 в 02:49.
|
|
08.03.2016, 17:14
|
Аспирант
|
|
Регистрация: 28.06.2014
Сообщений: 55
|
|
Сообщение от Poznakomlus
|
worker сами по себе интересная штука. можно и динамически запускать
|
Я не понимаю как этот код может передать текст между двумя сайтами.
Надо передать текст между двумя сайтами которые уже открыты в браузере. Как это сделать? storage не подходит потому что сайты с разных доменов.
|
|
|
|