Как разделить объект между двумя страницами? - PullRequest
2 голосов
/ 18 июня 2011

Я написал простой JS-скрипт для создания объекта, который позволяет инициализировать только один экземпляр.Если объект уже инициализирован, он возвращается без повторного создания.

Это мое: myobj.js

var Singleton = {

  initialized : null,

  init: function(){

    console.log("new obj...");

    this.initialized = {
      'status' : 'initialized'
    }

  },

  getInstance : function(){

    if (!this.initialized) this.init();

    return this.initialized;

  }

}

Затем я создаю test.html.страница для тестирования этого скрипта:

<script src="myobj.js"></script>

<script>
var uno = Singleton.getInstance();
var due = Singleton.getInstance();

(uno===due) ? console.log("equals") : console.log("not equals");
</script>

Все работает хорошо, создан только один объект.

Мой вопрос: могу ли я разделить этот объект "Singleton" между несколькими HTML-страницами?

без воссоздания его на разных страницах?

Если у меня (например) в браузере открыто 100 вкладок, я бы хотел использовать один и тот же объект, не имея одинаковых 100 объектов.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 09 октября 2012

Возможно, сейчас нет способа сделать это, но не стоит терять надежду; может быть способ сделать это в ближайшее время. Есть несколько веских причин для того, чтобы захотеть делиться объектами JS между страницами, но одна из них, о которой я подумал, - это совместное использование больших постоянных структур данных между многими WebWorkers.

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

Беркли / Google: Вид объектов: мелкозернистый обмен в браузерах

Беркли / Microsoft: Безопасный совместный доступ к JavaScript, браузер и физические ресурсы

2 голосов
/ 27 августа 2013

Боюсь, это невозможно во всех браузерах на момент написания без установки пользователем чего-либо. Два частичных решения:

1) Используйте расширение браузера для хранения состояния

Расширения браузера могут связываться с вашими страницами через API браузера хоста и поддерживать общее состояние. Однако пользователь должен установить их.

2) Использовать LocalStorage

Это общее для страниц в одном домене, но хранит только строки. Вы можете использовать JSON.stringify, чтобы преобразовать объект в строку и поместить его в localStorage. http://diveintohtml5.info/storage.html

0 голосов
/ 18 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...