Как передать переменную из одной вкладки браузера в другую?
То есть, в браузере открыто две вкладки с двумя разными, моими, сайтами и надо передать текст на другую вкладку. Как можно передать?
|
Всё, я уже понял как это сделать. Можно сохранять куки для любого домена. Например так
$.cookie('cookie', 'cookie_value', { domain: '' }); |
Чёрт. Не знаю почему, но почему-то уже не работает способ который написан выше. То есть для отдельных сайтов сохраняются отдельные куки, несмотря на то что домен указан пустой. Если не ошибаюсь, немного ранее этот способ работал.
|
милт,
юзай кросс-доменные запросы |
Цитата:
если сайт один но разные страницы то можно storage пример https://github.com/Poznakomlus/localstorage |
Poznakomlus,
Кроссдоменный Вариант: 1. Пишем скрипт для обоих доменов, считывающий window.name во фрейме начинающийся с name="sendMessage=Бла Бла бла" 2. Бла Бла бла во фрейме перезаписываем в Storage к примеру с тем же именем localStorage.sendMessage По событию изменения Storage(вешаем обработчик на вкладках), - считываем на нужной вкладке ячейку localStorage.sendMessage 3. Когда нужно передать, ставим фрейм с адресом принимающего домена с нужным name и сообщением |
Deff, не совсем понял зачем name здесь использовать (как работает я знаю)
как по мне вариант с фреймами по сути аналогичен workers недавно побаловался с фреймами почти как Ajax :) |
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 сами по себе интересная штука. можно и динамически запускать :blink: P.S. Где-то я ошибся для Ie, Edge :cray: |
Poznakomlus,
name фрейма(<iframe name="xxxx">) считывается во фрейме как window.name (весчь древняя и кроссбраузерная, символы кроме кавычек - любые, можно заэнкодить - если данные с кавычками, длина не ограничена, в отличии вставки данных в хешь Url фрейма (тоже возможный метод передачи во фрейм) Ну фрейм то с другого домена, А с workers не пробовал междоменный обмен, если конечно не через postMessage Но postMessage и blob имхо только c 11 версии ИЕ работают (любые ограничения кроссбраузерности убивают часть пользователей на моем ресурсе, 2% - 3% от всех - это десятки тысяч ================== worker интересен мне был в качестве обмена и отслеживания активных вкладок(и последней активной) с одного домена Задача возникает для скриптов уведомлений на основе title хидера, дабы не дублировались и уведомляли лишь на последне активной вкладке (Вам Письмо, к примеру, Важно так же если при этом есть и звук, чтобы не было звуков с нескольких вкладок, т.е и для поддержки всяких проигрывателей с автозапуском тоже важно, дабы звуки не дублировались с нескольких открытых вкладок) . Аналогично можно исключать таким методом и comet-запросы на неактивных вкладках. В worker нет ограничений на запуск setTimeout и setInterval на неактивной вкладке (в отличии от скриптов на странице, при неактивной вкладке интервал запуска по-моему становиться не менее секунды) |
Цитата:
Надо передать текст между двумя сайтами которые уже открыты в браузере. Как это сделать? storage не подходит потому что сайты с разных доменов. |
Часовой пояс GMT +3, время: 01:09. |