Я могу передать переменную JavaScript другому окну браузера?

Я хотел отфильтровать строки dfbc, у которых был BUSINESS_ID, который также был в BUSINESS_ID dfProfilesBusIds

. Наконец, он работал:

dfbc = dfbc[(dfbc['BUSINESS_ID'].isin(dfProfilesBusIds['BUSINESS_ID']) == False)]
68
задан Tom Kidd 17 September 2008 в 20:35
поделиться

8 ответов

Если окна от того же домена защиты, и у Вас есть ссылка на другое окно, да.

открытый JavaScript () метод возвращает ссылку на созданное окно (или существующее окно, если это снова использует существующий). Каждое окно, созданное таким способом, относилось к свойству это "window.opener", указывающий на окно, которое создало его.

Любой может тогда использовать DOM (безопасность, зависящая) к свойствам доступа другого или его документам, кадры и т.д.

41
ответ дан MarkR 7 November 2019 в 10:11
поделиться

Помещая код в вопрос, можно сделать это из родительского окна:

var thisIsAnObject = {foo:'bar'};
var w = window.open("http://example.com");
w.myVariable = thisIsAnObject;

или это из нового окна:

var myVariable = window.opener.thisIsAnObject;

я предпочитаю последнего, потому что необходимо будет, вероятно, ожидать новой страницы для загрузки так или иначе, так, чтобы можно было получить доступ к ее элементам, или независимо от того, что Вы хотите.

99
ответ дан Victor 7 November 2019 в 10:11
поделиться

В Вашем родительском окне:

var yourValue = 'something';
window.open('/childwindow.html?yourKey=' + yourValue);

Тогда в childwindow.html:

var query = location.search.substring(1);
var parameters = {};
var keyValues = query.split(/&/);
for (var keyValue in keyValues) {
    var keyValuePairs = keyValue.split(/=/);
    var key = keyValuePairs[0];
    var value = keyValuePairs[1];
    parameters[key] = value;
}

alert(parameters['yourKey']);

существует потенциально большая проверка ошибок, которую необходимо делать в парсинге пар ключ/значение, но я не включаю его здесь. Возможно, кто-то может обеспечить более содержащую стандартную программу парсинга строки запроса JavaScript в более позднем ответе.

2
ответ дан Grant Wagner 7 November 2019 в 10:11
поделиться

Да, сценарии могут получить доступ к свойствам других окон в том же домене, что у них есть дескриптор на (обычно полученный через window.open/opener и window.frames/parent). Это обычно более управляемо для вызова функций, определяемых на другом окне, а не скрипке с переменными непосредственно.

Однако окна могут умереть или идти дальше, и соглашение о браузерах с ним по-другому, когда они делают. Проверьте, что окно (a) все еще открыто (! window.closed), и (b) имеет функцию, которую Вы ожидаете доступный, прежде чем Вы попытаетесь назвать его.

Простые значения как строки прекрасны, но обычно это не хорошая идея передать сложные объекты, такие как функции, элементы DOM и закрытия между окнами. Если дочернее окно хранит объект от своего новичка, то новичок закрывается, тот объект может стать 'мертвым' (в некоторых браузерах, таких как IE) или вызвать утечку памяти. Могут последовать странные ошибки.

7
ответ дан bobince 7 November 2019 в 10:11
поделиться

С другой стороны, можно добавить его к URL и позволить языку сценариев (PHP, Perl, ASP, Python, Ruby, безотносительно) обрабатывают его с другой стороны. Что-то как:

var x = 10;
window.open('mypage.php?x='+x);
0
ответ дан Milan Babuškov 7 November 2019 в 10:11
поделиться

window.open () функция также позволит это, если у Вас будет ссылка на созданное окно, если это находится на том же домене. Если переменная является используемой стороной сервера, необходимо использовать $ _SESSION переменная (предположение, что Вы используете PHP).

-2
ответ дан HappySmileMan 7 November 2019 в 10:11
поделиться

Да, это может быть сделано, пока оба окна находятся на том же домене. window.open () функция возвратит дескриптор новому окну. Дочернее окно может получить доступ к родительскому окну с помощью элемента DOM "новичок".

1
ответ дан Jordan Mack 7 November 2019 в 10:11
поделиться

Для меня следующее не работает

var A = {foo:'bar'};
var w = window.open("http://example.com");
w.B = A;

// in new window
var B = window.opener.B;

, Но это работает (отметьте имя переменной)

var B = {foo:'bar'};
var w = window.open("http://example.com");
w.B = B;

// in new window
var B = window.opener.B;

Также var B должен быть глобальным.

0
ответ дан 24 November 2019 в 14:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: