Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как передать переменную из одной вкладки браузера в другую? (https://javascript.ru/forum/misc/61722-kak-peredat-peremennuyu-iz-odnojj-vkladki-brauzera-v-druguyu.html)

милт 04.03.2016 23:40

Как передать переменную из одной вкладки браузера в другую?
 
То есть, в браузере открыто две вкладки с двумя разными, моими, сайтами и надо передать текст на другую вкладку. Как можно передать?

милт 05.03.2016 00:34

Всё, я уже понял как это сделать. Можно сохранять куки для любого домена. Например так
$.cookie('cookie', 'cookie_value', {
    domain: ''
});

милт 05.03.2016 09:35

Чёрт. Не знаю почему, но почему-то уже не работает способ который написан выше. То есть для отдельных сайтов сохраняются отдельные куки, несмотря на то что домен указан пустой. Если не ошибаюсь, немного ранее этот способ работал.

destus 05.03.2016 10:17

милт,
юзай кросс-доменные запросы

Vlasenko Fedor 05.03.2016 17:45

Цитата:

Сообщение от милт
с двумя разными, моими, сайтами и надо передать текст на другую вкладку

workers
если сайт один но разные страницы то можно storage
пример https://github.com/Poznakomlus/localstorage

Deff 05.03.2016 23:15

Poznakomlus,
Кроссдоменный Вариант:
1. Пишем скрипт для обоих доменов, считывающий window.name во фрейме начинающийся с name="sendMessage=Бла Бла бла"

2. Бла Бла бла во фрейме перезаписываем в Storage к примеру с тем же именем localStorage.sendMessage
По событию изменения Storage(вешаем обработчик на вкладках), - считываем на нужной вкладке ячейку localStorage.sendMessage

3. Когда нужно передать, ставим фрейм с адресом принимающего домена с нужным name и сообщением

Vlasenko Fedor 06.03.2016 01:05

Deff, не совсем понял зачем name здесь использовать (как работает я знаю)
как по мне вариант с фреймами по сути аналогичен workers
недавно побаловался с фреймами почти как Ajax :)

Vlasenko Fedor 06.03.2016 01:12

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:

Deff 06.03.2016 02:14

Poznakomlus,
name фрейма(<iframe name="xxxx">) считывается во фрейме как window.name (весчь древняя и кроссбраузерная, символы кроме кавычек - любые, можно заэнкодить - если данные с кавычками, длина не ограничена, в отличии вставки данных в хешь Url фрейма (тоже возможный метод передачи во фрейм)
Ну фрейм то с другого домена,
А с workers не пробовал междоменный обмен, если конечно не через postMessage
Но postMessage и blob имхо только c 11 версии ИЕ работают (любые ограничения кроссбраузерности убивают часть пользователей на моем ресурсе, 2% - 3% от всех - это десятки тысяч
==================
worker интересен мне был в качестве обмена и отслеживания активных вкладок(и последней активной) с одного домена
Задача возникает для скриптов уведомлений на основе title хидера, дабы не дублировались и уведомляли лишь на последне активной вкладке (Вам Письмо, к примеру, Важно так же если при этом есть и звук, чтобы не было звуков с нескольких вкладок, т.е и для поддержки всяких проигрывателей с автозапуском тоже важно, дабы звуки не дублировались с нескольких открытых вкладок) . Аналогично можно исключать таким методом и comet-запросы на неактивных вкладках. В worker нет ограничений на запуск setTimeout и setInterval на неактивной вкладке (в отличии от скриптов на странице, при неактивной вкладке интервал запуска по-моему становиться не менее секунды)

милт 08.03.2016 17:14

Цитата:

Сообщение от Poznakomlus
worker сами по себе интересная штука. можно и динамически запускать

Я не понимаю как этот код может передать текст между двумя сайтами.

Надо передать текст между двумя сайтами которые уже открыты в браузере. Как это сделать? storage не подходит потому что сайты с разных доменов.


Часовой пояс GMT +3, время: 01:09.