Запретить перенаправлению родительского элемента iframe, не касаясь кода iframe - PullRequest
0 голосов
/ 09 марта 2019

Моя демонстрация: https://enfrte.neocities.org/code-examples/iframe.html

Привет, у меня есть локальная страница, которая содержит iframe с функцией, которая перенаправляет локальную страницу, если происходит щелчок по событию (кнопка «Остановить загрузку»).

На локальной странице у меня есть функция, которая прикреплена к кнопке перенаправления в iframe, но не может предотвратить перенаправление страницы, потому что она вызывается после функции перенаправления в iframe.

Можно ли как-нибудь предотвратить выполнение функции, выполняемой в iframe, с помощью функции, прикрепленной к локальной области, которая запускается кнопкой в ​​iframe. Я не могу редактировать содержимое iframe в моем сценарии, даже если он находится на том же сервере.

Спасибо.

Локальная страница

<body>

  <h3>Objective</h3>
  <p>Get NeoCities iframe buttons to also call local function alert.</p>

  <h3>iframe content in pink</h3>
  <iframe id="neocities-iframe" src="https://enfrte.neocities.org/code-examples/button.html"></iframe>

  <p>
  <button id="local_bt" data-bt="Local Button" type="button">Local Button</button>
  </p>

  <script>

  document.querySelector('#neocities-iframe').onload = function() {
    // First get your iframe
    var iframe = document.querySelector('#neocities-iframe');
    // And then the iframe's contentDocument or contentWindow properties 
    var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
    // Check for errors
    if (!iframeDocument) throw "iframe couldn't be found in DOM.";
    // And then get some content in the iframe
    var iframeContentBt1 = iframeDocument.querySelector('#nc_1');
    var iframeContentBtRedirect = iframeDocument.querySelector('#nc_redirect');
    iframeContentBt1.addEventListener('click', local);
    iframeContentBtRedirect.addEventListener('click', local);
  }

  document.querySelector('button').addEventListener('click', local);

  function local(e) {
    alert('Local call: ' + (e.target.value || e.target.innerText));
    e.preventDefault();
  }
  </script>
</body>

Содержание iframe

<button id="nc_1" data-bt="NeoCities One" type="button">NeoCities button 1</button>
<button id="nc_redirect" data-bt="NeoCities Loader" type="button">Stop me loading!</button>

<script>
  document.querySelector('#nc_1').addEventListener('click', btFun);
  document.querySelector('#nc_redirect').addEventListener('click', redirect);

  function btFun(e) {
    alert(e.target.value || e.target.innerText);  
  }

  function redirect() {
    console.log('redirect called');
    //window.location.assign("image.html");
    window.top.location.href = "image.html";
  }
</script>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...