Я создаю приложение 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] }"
для ряда различных функций.
Любая из следующих проблем решит мою проблему:
- Есть ли способ правильно структурировать этот объект во всей его полноте ( родные методы объекта и все)?
- Есть ли другой способ скопировать объект из Google Chrome в
<iframe>
в моем проекте? - Существуют ли другие обходные пути для прохождения этого Тест отпечатка пальца, который я не рассматривал?
Примечание: я также подумал об использовании объекта Electron BrowserView
для создания моего браузера в приложении. Тем не менее, он не проходит те же проверки отпечатков пальцев, что и <webview>
.