2012-05-04 2 views
1

Я в настоящее время использую fullCalendar.js как часть своего веб-приложения.Доступ к объекту JavaScript из отдельного окна

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

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

Имеет ли Javascript возможность обращаться к объектам из отдельных окон?

Я пробовал много способов доступа к объекту fullCalendar() из другого окна, но никто не работал.

материал как $(window.opener.document.body).find('#calendar').fullCalendar('refetchEvents');

Конкретно я нацеливание на refetchEvents крючок.

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

Что здесь происходит?

Невозможно ли ссылаться на мой объект календаря из отдельного окна?

Действительно ценят указатели.

Редактировать ------------------

Я просто попытался:

console.log(window.opener.calendar.fullCalendar())

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

Uncaught TypeError: Cannot read property 'eventSources' of undefined 
m.fn.fullCalendar:8888/js/fullcalendar/fullcalendar.min.js:110 
$.ajax.successhlc.js:892 
f.Callbacks.ojquery-1.7.2.min.js:2 
f.Callbacks.p.fireWithjquery-1.7.2.min.js:2 
wjquery-1.7.2.min.js:4 
f.support.ajax.f.ajaxTransport.send.d 

Помимо этого, никаких изменений пока нет. Внедрение новой функции сейчас.

Тем не менее дело с глобальной var calendar

+0

Это окно или div, который появляется? – mplungjan

+0

Это окно ... у div не было бы проблем, поскольку это тот же самый документ.Я хочу, чтобы окно всплывало, так как для этого приложения он работает хорошо. – Alex

+0

проблема с привязкой? 'Console.log (window.opener.calendar.fullCalendar.bind (window.opener.calendar)())'; –

ответ

2

был только короткий взгляд на код fullCalendar ... но, вообще говоря, как о пытающегося:

определение в окне открытия (window.opener) функции

function doRefetchEvents() { 
    alert("ok"); 
    $("#calendar").fullCalender("refetchEvents"); 
} 

, а затем из открытого окна:

window.opener.doRefetchEvents(); 

смотри также window.opener on MDN

+0

Я попробую сначала ... спасибо. – Alex

+0

Я пробовал это, но, к сожалению, он вернулся как неопределенный или как ссылка на нулевой объект. Хорошая идея. – Alex

+0

Пробовал ли вы это, загружая оба окна, используя тот же скрипт? – Alex

0

Вы можете попытаться сохранить календарь объект в LocalStorage (https://developer.mozilla.org/en/DOM/Storage#localStorage) по stringifying его (Http: //www.json .org/js.html -> JSON.stringify), а затем в другом окне для доступа к объекту путем разбора его с помощью JSON.parse.

+0

просто упомянуть (как я просмотрел некоторые вопросы): это не будет работать, поскольку JSON.stringify фактически ничего не выполняет с функциями, но удаляет ... Я думаю, что это даже упоминается в спецификации. см. также [здесь] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/stringify) раздел «Описание» - если не определено, функция или значение XML встречается во время преобразования, это либо пропущено или подвергнуто цензуре –

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