2010-05-21 4 views
1

Я новичок в программировании Javascript/Jquery, поэтому извиняюсь, если это простой/глупый вопрос.Функция jQuery getScript с кадрами

Я пытаюсь использовать функцию jQuery .getScript() для обновления части существующей веб-страницы. Эта веб-страница должна запускаться в локальной файловой системе, и большое количество форматирования выполняется с использованием фреймов.

Прямо сейчас есть три основных кадра - боковая панель, на которой отображаются возможные «области» на выбор, основной кадр, который отображает большую часть содержимого веб-страницы, и рамку нижнего колонтитула. Основная запись на страницу находится в файле index.html, который загружает файл sidebar.html, main.html и footer.html в каждый из соответствующих кадров.

В свою очередь, main.html имеет несколько загружаемых javascript-файлов, основным из которых является main.js, который содержит множество функций для форматирования/обработки содержимого этого главного окна. После загрузки этого файла javascript main.html загружает несколько файлов javascript, которые содержат данные, которые будут отображаться в основном фрейме. Эти загружаемые файлы имеют фиксированную структуру данных и зависят от функций, которые были загружены файлом main.js.

Загрузка веб-страницы теперь прекрасна, но когда пользователь пытается переключиться на другую «область», вся веб-страница перезагружается, чтобы сделать коммутатор. Единственная разница в веб-странице - это содержимое в кадре main.js, загружаемое другим набором файлов .js.

Достаточно текста, давайте посмотрим на некоторый код.

При загрузке веб-страницы я попытался добавить простой вызов функции getScript в файле .js на уровне index.html, который обрабатывает области переключения. Этот файл newFile имеет разные определения данных, чем ранее загруженный файл oldFile.js, который был загружен в файл main.html.

$ .getScript (/js/newFile.js);

Однако это не сработает, поскольку newFile.js зависит от функции parseData(), которая находится в main.js.

Если я открываю firebug, parseData не находится на вкладке dom, которая, как я полагаю, связана с некоторой проблемой с основным файлом main.html и main.js, существующим в другом фрейме.

Я попытался сделать какой-то таргетинг на правильный «кадр», но я не думаю, что достаточно понимаю jQuery, чтобы знать, что происходит.

$ (window.parent.frames [0]). GetScript (/js/newFile.js);

Любые предложения?

Если бы я был ввести в Firebug консоли «parseData» он не может найти его: «ReferenceError: parseData не определен»

Однако, если я типа в window.parent.frames [1] .parseData, он может найти функцию.

Извините за все бессвязное и плохое понимание javascript. Надеюсь, кто-то может оказать некоторую помощь!

Благодаря

+0

Это оказалось проблемой при попытке загрузить файлы из локальной файловой системы. Одна и та же политика происхождения домена в браузере заставила меня не иметь доступа к файлам, которые мне нужно было получить. – user210099

ответ

0

.getScript() выполняет загруженный скрипт в глобальном контексте. Я бы предположил, что, поскольку ваша функция parseData() недоступна в глобальной области видимости.Вы можете попробовать определение parseData глобально, обернув его в jQuery.globalEval() вызова следующим образом:

$.globalEval(" 
    function parseData(){ 
     alert('It works!'); 
    } 
"); 

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

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