Прослушивание событий в iframe [дубликат]

Примечание: это было первоначально написано на Установка ADB на MAC OS X , но этот вопрос был закрыт как дубликат этого.

Опция 1 - Использование Homebrew

Это самый простой способ и обеспечит автоматическое обновление.

  1. Установите homebrew
    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    
  2. Установить adb
    brew cask install android-platform-tools
    
  3. Начать использовать adb
    adb devices
    

Вариант 2 - Вручную (только инструменты платформы)

Это самый простой способ получить ручную установку ADB и Fastboot.

  1. Удалите старую установку (необязательно)
    rm -rf ~/.android-sdk-macosx/
    
  2. Перейдите к https://developer.android.com/studio /releases/platform-tools.html и нажмите ссылку SDK Platform-Tools for Mac.
  3. Перейдите в папку «Файлы загрузки»
    cd ~/Downloads/
    
  4. Разархивируйте загруженные вами инструменты
    unzip platform-tools-latest*.zip 
    
  5. Переместите их туда, где вы случайно не удалите их
    mkdir ~/.android-sdk-macosx
    mv platform-tools/ ~/.android-sdk-macosx/platform-tools
    
  6. Добавьте platform-tools к вашему пути
    echo 'export PATH=$PATH:~/.android-sdk-macosx/platform-tools/' >> ~/.bash_profile
    
  7. Обновите свой профиль bash (или перезапустите приложение терминала)
    source ~/.bash_profile
    
  8. Начните использовать adb
    adb devices
    

Вариант 3. Если у вас уже установлен Android Studio

  1. Добавьте platform-tools к вашему пути
    echo 'export ANDROID_HOME=/Users/$USER/Library/Android/sdk' >> ~/.bash_profile
    echo 'export PATH=${PATH}:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools' >> ~/.bash_profile
    
  2. Обновить ваш баш-профиль (или перезапустите приложение терминала)
    source ~/.bash_profile
    
  3. Начните использовать adb
    adb devices
    

Вариант 4 - MacPorts

  1. Установите Android SDK:
    sudo port install android
    
  2. Запустите диспетчер SDK:
    sh /opt/local/share/java/android-sdk-macosx/tools/android
    
  3. Снимите все флажки, кроме Android SDK Platform-tools (необязательно)
  4. Установите пакеты, принимая лицензии. Закройте диспетчер SDK.
  5. Добавьте platform-tools к вашему пути; в MacPorts они находятся в /opt/local/share/java/android-sdk-macosx/platform-tools. Например, для bash:
    echo 'export PATH=$PATH:/opt/local/share/java/android-sdk-macosx/platform-tools' >> ~/.bash_profile
    
  6. Обновите свой профиль bash (или перезапустите терминал / оболочку):
    source ~/.bash_profile
    
  7. Начните использовать adb:
    adb devices
    

Вариант 5 - Вручную (с SDK-менеджером)

  1. Удалить свою прежнюю установку (необязательно)
    rm -rf ~/.android-sdk-macosx/
    
  2. Загрузить Mac SDK Tools с сайта разработчика Android в разделе «Получить только инструменты командной строки» . Убедитесь, что вы сохранили их в папке «Загрузки».
  3. Перейдите в папку «Загрузить»
    cd ~/Downloads/
    
  4. Разархивируйте загруженные вами инструменты
    unzip tools_r*-macosx.zip 
    
  5. Переместите их где-нибудь вы случайно не удалите их
    mkdir ~/.android-sdk-macosx
    mv tools/ ~/.android-sdk-macosx/tools
    
  6. Запустите диспетчер SDK
    sh ~/.android-sdk-macosx/tools/android
    
  7. Снимите все флажки, кроме Android SDK Platform-tools (опционально)

  1. Нажмите Install Packages, примите лицензии, нажмите Install. Закройте окно диспетчера SDK.

  1. Добавьте platform-tools к вашему пути
    echo 'export PATH=$PATH:~/.android-sdk-macosx/platform-tools/' >> ~/.bash_profile
    
  2. Обновите свой профиль bash (или перезапустите приложение терминала)
    source ~/.bash_profile
    
  3. Начните использовать adb
    adb devices
    

34
задан Kunal Vashist 22 February 2012 в 13:01
поделиться

2 ответа

Если у вас нет контроля над фрейм-сайтом, вы не можете обойти междоменную политику.

Если у вас есть контроль над обоими сайтами, вы можете использовать postMessage для передачи данных в разных доменах. Очень простой пример:

// framed.htm:
window.onmessage = function(event) {
    event.source.postMessage(document.body.innerHTML, event.origin);
};

// Main page:
window.onmessage = function(event) {
    alert(event.data);
};

// Trigger:
// <iframe id="myframe" src="framed.htm"></iframe>
document.getElementById('myframe').contentWindow.postMessage('','*');
46
ответ дан Rob W 19 August 2018 в 03:03
поделиться

В событии Internet Explorer 8, переданном как параметр, может быть null, поэтому вам нужно получить доступ к событию другим способом:

В файле frame.html:

window.onmessage = function(event) {
   var evt = evt || window.event;
   evt.source.postMessage('Message from iFrame', evt.origin);
};

На main.html:

window.onmessage = function(event) {
   var evt = evt || window.event;
   alert(evt.data);
};

Событие запускается так же, как и Rob W:

document.getElementById('frameId').contentWindow.postMessage('message','*');
3
ответ дан Przemek Marcinkiewicz 19 August 2018 в 03:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: