簡體   English   中英

JS在彈出窗口上執行操作

[英]JS Performing actions on a popup window

所以最近我一直在學習JS並嘗試與網頁進行交互,起初是抓取,但現在也要在特定網頁上進行交互。 例如,我有一個包含一個按鈕的網頁,我想大約每30秒按下一次該按鈕,然后刷新(然后再次開始倒計時)。 我寫了以下腳本來做到這一點:

var klikCount = 0;
function getPlayElement() {
    var playElement = document.querySelector('.button_red');
    return playElement;
}
function doKlik() {
    var playElement = getPlayElement();
    klikCount++;
    console.log('Watched ' + klikCount);
    playElement.click();
    setTimeout(doKlik, 30000);
}
doKlik()

但是現在我需要加強游戲,每次單擊按鈕都會彈出一個新窗口,我也需要在其中執行一個操作,然后關閉它並返回到“ main”腳本。 通過JS可以做到嗎? 請記住,我是一個javascript新手,並且不了解很多基本功能。

謝謝亞歷克斯

DOM事件具有isTrusted屬性,該屬性僅在用戶生成事件時才為true ,而不是像el.click()情況那樣是綜合的。

彈出窗口是眾多Web機制之一,僅當用戶執行了單擊或類似操作而不是代碼本身時才起作用。

賦予頁面打開無限量彈出窗口的功能從來都不是一個好主意,因此很久以前,他們以多種方式取消了該功能。

您可以在自己的標簽/窗口中創建iframe,並通過postMessage在這些框架中執行操作,但是我不確定這對您是否足夠。

無論如何,如果是從用戶生成點擊,那么將起作用的代碼如下所示:

document.body.addEventListener(
  'click',
  event => {
    const outer = open(
      'about:blank',
      'blanka',
      'menubar=no,location=yes,resizable=no,scrollbars=no,status=yes'
    );
    outer.document.open();
    outer.document.write('This is a pretty big popup!');
    // post a message to the opener (aka current window)
    outer.document.write(
      '<script>opener.postMessage("O hi Mark!", "*");</script>'
    );
    // set a timer to close the popup
    outer.document.write(
      '<script>setTimeout(close, 1000)</script>'
    );
    outer.document.close();
    // you could also outer.close()
    // instead of waiting the timeout
  }
);

// will receive the message and log
// "O hi Mark!"
addEventListener('message', event => {
  console.log(event.data);
});

每個彈出窗口都有一個打開器,每個不同的窗口都可以通過postMessage進行通信。

您可以在MDN中閱讀有關window.open的更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM