Ваша проблема может заключаться в том, что у вас есть два файла JavaScript с одинаковым содержимым, в то время как пространства имен не применяются.
Во-первых, ваш родительский файл включает файл.js, в котором определен ваш updateLayer (). Затем родитель открывает дочернее окно, которое также включает этот файл.js. Если вы сделаете это, у вас будет запущено два потока, каждый из которых может иметь свои собственные функции и объекты, не мешая другим. Я предполагаю, что ваша функция является глобальной. Это может вызвать проблемы, если пространства имен не используются. Также может случиться, что ваша большая библиотека ajax создает фреймы iframe и тому подобное, и вы ничего из этого не увидите, потому что это происходит под капотом.
Так что попробуйте: top.window.opener.updateLayer ("Layer3", "380118179930");
Если это не поможет, попробуйте открыть пустое окно без включенного файла file.js и вызвать эту функцию из средства открытия. Если это сработает, оберните содержимое этого file.js в пространство имен, например myNamespace = {.... big file content inbetween ....}, сделайте две версии этого (или лучше динамически включите содержимое) и убедитесь, что вы есть два разных пространства имен. JavaScript чаще всего работает не так, как вы думаете.
Кроме того, убедитесь, что URL для вашего открытого окна имеет точно того же домена. Это может вызвать проблемы с безопасностью, так что браузер запрещает доступ из дочернего окна к его родительскому.