Как использовать метод executeScript плагина inAppBrowser в ionic 2?

У меня есть этот код в событии клика

let browser = new InAppBrowser('http://example.com/test', '_self');
browser.executeScript({code: "(function() { alert(123); })()"});

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

Почему не запускается с первого раза?


person RezaT1994    schedule 21.02.2017    source источник


Ответы (5)


Добавьте executeScript внутрь InAppBrowser.addEventListener (loadstart, loadstop, loaderror), после чего он запустится в первый раз. Я использую ionic 1, но я думаю, что он также будет работать в ionic 2. Я добавил пример кода ниже. (Вот как это выглядит в ionic 1).

  browser.addEventListener('loadstart', function(){
            browser.executeScript({code: "(function() { alert(123); })()"});
        })
person coder    schedule 21.02.2017
comment
Когда я пытаюсь добавитьEventListener, он сообщает мне, что свойство addEventListener не существует для типа InAppBrowser. Что тут происходит? - person rashadb; 26.03.2017
comment
Вы установили cordova-plugin-inappbrowser? - person coder; 26.03.2017
comment
Я сделал, и этот метод не является частью версии с оболочкой Ionic. Я получил к нему доступ, используя обычную версию Cordova. - person rashadb; 26.03.2017

Это больше не работает таким образом. Попытайся!

browser.on('loadstop').subscribe(() => {
  browser.executeScript({code: 'your_code'})
});

Это работает для меня.

person Andrews Duarte    schedule 29.11.2017

Попробуйте запустить следующий код. Это работало на меня.

   var ref = cordova.InAppBrowser.open("https://www.test.com/", '_blank');
            ref.addEventListener('loadstart', function() {
                ref.executeScript({
                    code: '//put the script you want to run here'
                });
            })

Убедитесь, что указано _blank, а не _system. _system откроет родной браузер (например, chrome)

person Johnu James Marattil    schedule 11.12.2018
comment
Уважаемые. Команда, мы хотим анализировать файлы cookie в браузере, и мы разрабатываем приложение на основе ionic 3. пожалуйста помогите нам - person karthik elavan; 14.05.2020
comment
мы попробовали this.inAppBrowserInstance = this.inAppBrowser.create(URL, '_blank'); this.inAppBrowserInstance.on('beforeload') .subscribe(event =› { this.inAppBrowserInstance.executeScript({ code: document.cookie = "JSESSIONID=cookievalue" }).then(). но не работает - person karthik elavan; 14.05.2020

Ответ @Andrews отлично сработал для меня. Вот мой полный код для приложения Ionic 3 с использованием @ionic-native/themeable-browser:

let options: ThemeableBrowserOptions = {
        statusbar: { color: '#1976d2ff' },
        toolbar: { height: 44, color: '#1976d2ff' },
        closeButton: { align: 'right', event: 'closed', wwwImage: '/assets/images/icons/close-empty.png', wwwImagePressed: '/assets/images/icons/close-outline.png', wwwImageDensity: 3 },
        usewkwebview: 'yes',
        disallowoverscroll: 'yes',
        allowInlineMediaPlayback: 'yes',
        mediaPlaybackRequiresUserAction: 'no'
    },
    browser: ThemeableBrowserObject = self.iab.create(url, '_blank', options);
if (this.platform.is('ios')) {
    browser.on('loadstop').subscribe(() => {
        browser.executeScript({ code: 'document.body.classList.add("cordova-ios");' });
    });
}

Таким образом, я могу явно стилизовать iOS в Cordova через наследование класса body.cordova-ios

person TaeKwonJoe    schedule 01.10.2019

@ RezaT1994 Изменение «_self» на «_blank» решило эту проблему для меня.

let browser = new InAppBrowser('http://example.com/test', '_blank');
browser.executeScript({code: "(function() { alert(123); })()"});
person Palindromek    schedule 10.06.2021