2014-01-02 1 views
3

На вкладке с URL http://foo.com/ настроить позицию sessionStorage thus-Как предотвратить унаследование sessionStorage при использовании target = "_ blank" /window.open(), чтобы открыть новое окно/вкладку?

sessionStorage.bar="hello"; 

я затем открыть новое окно на любом пути на том же домене -

window.open("http://foo.com/any/path"); 

Затем на новом окне я нахожу что -

sessionStorage.bar === "hello" 

Это правда. То же самое происходит, если я использую ссылку с атрибутом target = "_ blank", чтобы открыть новое окно. То же самое происходит и при открытии новой вкладки, а не в новом окне. Другое дело, что это верно только для элементов, установленных на sessionStorage, прежде чем открывать новое окно. Добавление или изменение любого элемента в sessionStorage в обоих окнах после открытия нового окна никак не влияет на другое окно.

Я думал, что sessionStorage должен быть привязан к одной вкладке/окну, но, видимо, sessionStorage распространяется на новые вкладки и окна, когда они открываются из другого окна.

Есть ли способ предотвратить это? Вероятно, я могу проверить наличие window.opener, чтобы обнаружить такой случай, но было бы намного чище, если бы можно было предотвратить его в первую очередь.

Спасибо!

+0

sessionStorage предназначен для сеанса, отсюда и название. Не важно, на какой вкладке у вас есть. –

+0

@JeremyMiller, спасибо за ваш комментарий, не могли бы вы рассказать подробнее? Как определяется сеанс? [MDN] (https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage) просто говорит, что «Открытие страницы в новой вкладке или окне приведет к тому, что новый сеанс будет инициатор «. – odedbd

+0

Хмм ... Я, должно быть, ошибся. Теперь проверьте детали. –

ответ

4

В соответствии с Webstorage Specification «Когда новый документ создается в контексте просмотра, который имеет контекст просмотра на верхнем уровне, пользовательский агент должен проверить, имеет ли этот контекст обзора на верхнем уровне область хранения сеанса для этого происхождение документа. Если это так, то это назначенная область хранения сеанса документа ».

Итак, примите во внимание, что если вы закроете вкладку, откройте новую вкладку, это будет новый «сеанс» в спецификации. Однако, если вкладка остается открытой, и затем открывается новая вкладка, контекст просмотра верхнего уровня соответствует, поэтому ссылка на sessionStorage ссылается.

+0

Спасибо! Есть ли у вас какие-либо предложения относительно того, как переопределить или обойти это поведение, кроме проверки window.opener? – odedbd

+0

Только уничтожая сеансStorage onLoad. Какова ваша цель? –

+0

Я не могу уничтожить sessionStorage, поэтому, я думаю, я бы работал вокруг проверки window.opener. Еще раз спасибо за вашу помощь и понимание! – odedbd

 Смежные вопросы

  • Нет связанных вопросов^_^