Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
3 / 3 / 0
Регистрация: 22.11.2019
Сообщений: 55

Добавить window.addEventListener в webbrowser

26.02.2020, 07:51. Показов 1158. Ответов 1

Студворк — интернет-сервис помощи студентам
Всем привет,
Перейду сразу к вопросу, на сайте есть такой код:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
window.addEventListener('message', function(e) {
            if (typeof e.data == 'object') {
                if(e.data.type == 'callVipPay'){
                    callVipPay(e.data);
                }else if(e.data.type == 'callPay'){
                    callPay(e.data);
                }else if(e.data.type == 'support'){
                    openSupport(e.data);
                }
            }
        },false);
события из Flash передаются в виде события на parent, где его обрабатывает указанный код.
Дело в том, что я отловил передающее окно, и запустил его отдельно, убрав всю рекламу и ид с родительского сайта.
Необходимые скрипты переданы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0];
            HtmlElement scriptEl = webBrowser1.Document.CreateElement("script");
            IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement;
            
            element.text = "function callPay() { window.external.callPay('"+callPay+"') }";  
            head.AppendChild(scriptEl);
 
            element.text = "function callVipPay() { window.external.callVipPay('" + callVIPPay + "') }";
            head.AppendChild(scriptEl);
 
            element.text = "function openSupport() { window.external.openSupport('"+CSLink+"') }";
            head.AppendChild(scriptEl);
 
            element.text = "function ClearCache() { window.external.clearCache() }";
            head.AppendChild(scriptEl);
Проблема заключается в прослушке, пробовал передать ее так-же как и обычные скрипты:
C#
1
2
3
4
HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0];
            HtmlElement scriptEl = webBrowser1.Document.CreateElement("script");
            scriptEl.SetAttribute("text", script_listener_text.Text);
            head.AppendChild(scriptEl);
Оно не работает, для проверки, чтобы убедиться что я сделал все "верно" добавил вот такую строчку
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
window.addEventListener('message', function(e) {
            if (typeof e.data == 'object') {
                if(e.data.type == 'callVipPay'){
                    callVipPay(e.data);
                }else if(e.data.type == 'callPay'){
                    callPay(e.data);
                }else if(e.data.type == 'support'){
                    sayHello(e.data);
                }else if(e.data.type =="fiftyLevel"){
                    fiftyLevel(e.data);
                }
            }
        },false);
function sayHello() { alert('hello') }
И по вызову
C#
1
webBrowser1.Document.InvokeScript("sayHello");
привет он все-же передает, но не реагирует на события из флеш.
Решил пойти другим путем и добавил:
C#
1
2
3
4
5
webBrowser1.Document.AttachEventHandler("message", this.rechargeToolStripMenuItem1_Click);
            webBrowser1.Document.AttachEventHandler("object", this.rechargeToolStripMenuItem1_Click);
            webBrowser1.Document.AttachEventHandler("callVipPay", this.rechargeToolStripMenuItem1_Click);
            webBrowser1.Document.AttachEventHandler("callPay", this.rechargeToolStripMenuItem1_Click);
            webBrowser1.Document.AttachEventHandler("ondblclick", this.rechargeToolStripMenuItem1_Click);
для проверки, разумеется оно не делает что мне нужно, но вот двойной клик он обрабатывает на кромке, но не на флеш. Т.е. если добавить его на первоначальный сайт, то двойной клик по не-флеш отработает, но если отловить флеш в отдельное окно то двойной клик не отработает, что, в теории, понятнол, ведь я передал его во флеш объект.
Т.Е. вопрос в том, как правильно отловить события, которые обрабатывал изначальный скрипт.
Вохможно ли, что, поскольку я запустил его по прямой ссылке (....game.jsp?...), то событие он передает мне на форму или браузер, но не webBrowser1.Document?
На всякий случай скину webbrowser.document страницы, после перехвата:
Кликните здесь для просмотра всего текста
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
    
<html debug="true">
<head>
<link rel="icon" href="/favicon.ico" mce_href="/favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="/favicon.ico" mce_href="/favicon.ico" type="image/x-icon">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Dragonlord</title>
<!-- Google Tag Manager -->
<!-- Global site tag (gtag.js) - Google Ads: 717271119 -->
<script async src="https://www.googletagmanager.com/gtag/js?id=AW-717271119"></script>
 
<script>
if(document.domain.indexOf("10.10.10") < 0)
{
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
 
  gtag('config', 'AW-717271119');
  
}
</script>
<!-- End Google Tag Manager -->
 
<!-- Facebook Pixel Code -->
<script>
if(document.domain.indexOf("10.10.10") < 0)
{
!function(f,b,e,v,n,t,s)
{
   if(f.fbq)
   {
      return;
   }
 
   n=f.fbq=function(){
       n.callMethod.apply(n,arguments):n.queue.push(arguments)
   };
   
   if(!f._fbq)
   {
     f._fbq=n;
   }
 
   n.push=n;
   n.loaded=!0;
   n.version='2.0';
   n.queue=[];
   t=b.createElement(e);
   t.async=!0;
   t.src=v;
   s=b.getElementsByTagName(e)[0];
   s.parentNode.insertBefore(t,s)
}(window,document,'script','https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '921561238182864'); 
fbq('track', 'PageView');
}
</script>
 
<noscript>
 <img height="1" width="1" src="https://www.facebook.com/tr?id=921561238182864&ev=PageView&noscript=1"/>
</noscript>
 
<script type="text/javascript" src="scripts/swfobject.js"></script>
<script type="text/javascript" src="scripts/dnkv9.js"></script>
<script type="text/javascript" src="scripts/french_api_4.js"></script>
    
<style> 
  body,html
  {
    margin: 0px auto;
    padding: 0px; 
    /*background-position:center center;*/
    overflow-x:hidden;
    font-size:14px;
    color:#FF0000;
    text-align:center;
  }
  #wrap { text-align:left; margin:0 auto; }
</style> 
</head>
 
<body scroll="no"  bgcolor="#000000" onLoad="initSwf();"  style="margin:0px;padding:0px;" >
    
    <!-- Google Tag Manager -->
    <!-- Event snippet for 转化注册 conversion page -->
    <script> gtag('event', 'conversion', {'send_to': 'AW-717271119/dq2RCMPUgq8BEM_ggtYC'});</script>
    <!-- End Google Tag Manager (noscript) -->
 
    <div id="Main" name="Main" style="width:100%;height:100%;" >
        <div id="MainGame" name="MainGame" style="center no-repeat;height=100%;width:100%;background-color:#FFFFFF;">
        <p>
            To Stelle zum Lesen der Seite sicher, dass Adobe Flash Player Version 
            11.4.0 oder höher installiert wurde. 
        </p>
        <script type="text/javascript"> 
        document.write("<a href='http://www.adobe.com/go/getflashplayer'><img src='./get_flash_player.gif' alt='Get Adobe Flash player' /></a>" );
        </script>
        </div>
    </div>
  </div>
</body>
</html>
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.02.2020, 07:51
Ответы с готовыми решениями:

Как на C# добавить новый метод к Window.External?
Как на C# добавить новый метод к Window.External. В COMе это делалось с помощью создания IDispatch. А как в .NETe?

Вызов Window.ShowDialog() срабатывает как Window.Show(), т.е. я могу нажимать на другие окна
Здравствуйте, уважаемые форумчане. Столкнулся с проблемой. У меня есть окно, которое выполняет некоторые действия всё время работы...

Добавить скрипт в webBrowser
Здравствуйте, подскажите как выполнить скрипт в webBrowser? у меня в webBrowser загружается страница и на ней надо будет выполнить мой...

1
3 / 3 / 0
Регистрация: 22.11.2019
Сообщений: 55
06.03.2020, 09:29  [ТС]
Решил проблему, сказалось мое не знание JS.
C#
1
2
element.text = "function postMessage(e,star) { window.external.test(e.type) }";
head.AppendChild(scriptEl);
C#
1
2
3
4
public void test(string Type)
{
MessageBox.Show(Type);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.03.2020, 09:29
Помогаю со студенческими работами здесь

Добавить window.addEventListener в webbrowser
Привет всем, вопрос был задан в ветке С#, но он в равной степени относится и к JS. Продублирую его здесь. Да простят меня админы если это...

Window.onload/addEventListener
Почему второй обработчик срабатывает сразу при загрузке страницы, а не при клике, как первый? Что нужно сделать, чтобы он срабатывал при...

Window.addEventListener функция с параметрами
window.addEventListener('resize', function(l, t, rw, rh) { alert(l + '; ' + t + '; ' + rw + '; ' + rh); }, false); можно ли в...

Можно ли добавить addEventListener к конкретной колонке таблицы?
Подскажите плс, возможно ли добавить addEventListener к конкретной колонке таблицы только в тег tbody, но thead и tfoot не трогать. По...

Window является свойством глобального объекта Window
если объект window является свойством глобального объекта Window, то почему запись: Window.window // =&gt; undefined


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru