Доступ к функции с другой страницы (IE11)

У меня есть родительская страница, которая открывает дочернюю страницу (IE11).

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

Это содержимое родительской страницы (упрощенное):

<script>

    let newWindow = window.open('cannon.htm','Picture Display', 'width=780, height=520');

</script>

<button onclick = "newWindow.actions.sayHello()">Say</button>

Это содержимое дочерней страницы (упрощенно):

let actions;

window.addEventListener('load', function() {

    actions = (function() {

        return {
            sayHello: function() {
                 console.info("hello");
            }
        }

    })();

});

Это вызывает ошибку. Почему? Как я могу заставить его работать?

ОШИБКА: невозможно получить свойство «sayHello» неопределенной или нулевой ссылки

Вы также должны опубликовать ошибку, которую вы получили. :)

l2aelba 08.04.2019 09:59

Я добавил его в основной пост: Не удалось получить свойство «sayHello» неопределенной или нулевой ссылки.

devamat 08.04.2019 10:08
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
2
148
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Используйте отдельный скрипт:

cannon.js:

let actions;

window.addEventListener('load', function() {

    actions = (function() {

        return {
            sayHello: function() {
                 console.info("hello");
            }
        }

    })();

});

cannon.htm:

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

Родительская страница (index.html):

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

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

thebjorn 08.04.2019 10:03
Ответ принят как подходящий

Я нашел решение! Очень просто: просто используйте var actions; вместо let actions; для доступа к функции. let ограничивает область действия, поэтому она недоступна.

Подробнее здесь: В чем разница между использованием «let» и «var»?

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

Deepak-MSFT 09.04.2019 04:28

Другие вопросы по теме