Как получить точную копию объекта iframe.contentWindow Chrome. chrome? - PullRequest
0 голосов
/ 14 января 2020

Я создаю приложение Electron JS со своим собственным браузером, интегрированным в приложение. Для этого я использую <webview>. Однако некоторые сайты используют дактилоскопию для обнаружения ботов, похожих на это . Один из тестов, который дает сбой (задокументировано здесь ):

iframeChrome: () => {
    const iframe = document.createElement('iframe');
    iframe.srcdoc = 'blank page';
    document.body.appendChild(iframe);

    const result = typeof iframe.contentWindow.chrome;
    iframe.remove();

    return result;
},

Поскольку я не хочу, чтобы мой браузер в приложении был неправильно классифицирован как бот, я хотел бы добавить копия объекта Google Chrome iframe.contentWindow.chrome для любого созданного <iframe>. Я подумал, что хорошим решением было бы дождаться события DOMNodeInserted и добавить этот объект в каждый вставленный <iframe>. Чтобы сделать это, мне нужно было бы структурировать объект JSON в Google Chrome, а затем добавить его в мой проект, используя myIframe.contentWindow['chrome'] = chromeCopiedObjectGoesHere. Однако у этого объекта есть собственные методы объекта.

Для того, чтобы также упорядочить методы объекта, я нашел еще одну публикацию StackOverflow , которая рекомендует следующее:

var json = JSON.stringify(obj, function(key, value) {
  if (typeof value === 'function') {
    return value.toString();
  } else {
    return value;
  }
});

и используя eval() для возвращаемых функций. Однако, когда я делаю это, объект JSON по-прежнему не корректно преобразуется в строку, поскольку некоторые методы объекта являются нативными. Я получаю, например, "loadTimes":"function () { [native code] }" для ряда различных функций.

Любая из следующих проблем решит мою проблему:

  1. Есть ли способ правильно структурировать этот объект во всей его полноте ( родные методы объекта и все)?
  2. Есть ли другой способ скопировать объект из Google Chrome в <iframe> в моем проекте?
  3. Существуют ли другие обходные пути для прохождения этого Тест отпечатка пальца, который я не рассматривал?

Примечание: я также подумал об использовании объекта Electron BrowserView для создания моего браузера в приложении. Тем не менее, он не проходит те же проверки отпечатков пальцев, что и <webview>.

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