如何确保在浏览器控件中引发MSGestureHold事件 [英] How to make sure MSGestureHold event is raised in browser control

查看:55
本文介绍了如何确保在浏览器控件中引发MSGestureHold事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我以为我为这个问题创建了一个新主题,因为在其他主题的底部发布它并没有引起注意。


无论如何,我正在创建一个使用浏览器控件的浏览器应用程序。我正在尝试检测页面上链接的保留事件,以便我可以显示自己的自定义菜单。


这个是我到目前为止所做的事情


       

     if(webBrowser.IsScriptEnabled)
            {
                 string gestureHold = string.Format(" {0} {1} {2} {3} {4} {5} {6} {7}",
                    " VAR链接= document.getElementsByTagName( 'A');" ;,
&NBSP ;                  " for(i = 0; i< links。长度;我++)" ;,
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;" ; {" ;,
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;"链接[I] - 阅读进度 - ( 'MSGestureHold',事件监听,假);" ;,
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;              " links [i] .addEventListener('MSPointerDown',甚至tListener,假);" ;,
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP;&NBSP;&NBSP; " gestureHandler =新MSGesture();" ;,
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; "gestureHandler.target = links [i];",
                 &NBSP;&NBSP;&NBSP; "};");

                串EVENTLIST =的String.Format(QUOT; {0} {1} {2} {3} {4}" ;,
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;"函数事件监听(EVT)" ;,
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;" {" ;,
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;"若(evt.type == 'MSPointerDown'){gestureHandler.addPointer(evt.pointerId);返回; }" ;,
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;"如果(evt.detail&安培; evt.MSGESTURE_FLAG_END){window.external.notify(evt.target.href);}" ;,
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;           "};");


                webBrowser.InvokeScript(" execScript",eventList);
                webBrowser.InvokeScript(" execScript",gestureHold);
            }

现在它在长按时检测到链接,但它只返回页面上的最后一个链接。有时长时间点击事件不会被触发。另一个问题是,当用户单击链接并导航到其他页面时,脚本将停止工作,不再提升MSGestureHold
事件。


我已确保将脚本附加到webBrowser_Navigated事件中,但问题仍然存在。有任何建议如何解决这个问题?谢谢

解决方案

您好,


我在OS上运行版本8.0.10211.204


当web浏览器<跨度> <跨度> InvokeScript <跨度>( <跨度>"。EXECSCRIPT" gestureHold );已执行我收到未知错误  80020101。


如果 我删除了这一行"gestureHandler = new MSGesture()"没有错误。


Internet Explorer HTML上的相同代码有效。在网页浏览器控件上没有。


你能发布完整的项目示例吗?


谢谢。



I thought I create a new topic for this question since posting it at the bottom of some else's topic didn't get it noticed.

Anyway, I am creating a browser app using the browser control.I am trying to detect the hold event on links on a page so that I can show my own custom menu.

This is what I've done so far

       

     if (webBrowser.IsScriptEnabled)
            {
                 string gestureHold = string.Format("{0} {1} {2} {3} {4} {5} {6} {7}",
                    "var links = document.getElementsByTagName('a'); ",
                    "for (i = 0; i < links.length; i++)",
                    "{",
                        "links[i].addEventListener('MSGestureHold', eventListener, false);",
                        "links[i].addEventListener('MSPointerDown', eventListener, false);",
                        "gestureHandler = new MSGesture();",
                        "gestureHandler.target = links[i];",
                    "};");

                 string eventList = string.Format("{0} {1} {2} {3} {4}",
                     "function eventListener(evt)",
                     "{",
                     "if (evt.type == 'MSPointerDown') { gestureHandler.addPointer(evt.pointerId); return; }",
                     "if (evt.detail & evt.MSGESTURE_FLAG_END) { window.external.notify(evt.target.href); }",
                     "};");


                webBrowser.InvokeScript("execScript", eventList);
                webBrowser.InvokeScript("execScript", gestureHold);
            }

Now it detects the link on long tap but it only returns the last link on the page. And sometimes the on long tap event is not fired. Another issue is when user click a link and navigate to other page, the script stop working and no longer raise the MSGestureHold event.

I've made sure I attached the script in the webBrowser_Navigated event but the problem persists. Any suggestion how to fix this? Thanks

解决方案

Hello,

I am running on OS version 8.0.10211.204

When webBrowser.InvokeScript("execScript", gestureHold); is executed I get unknown error 80020101.

If  I remove this line "gestureHandler = new MSGesture()" there is no error.

Same code on internet explorer HTML works. on the web browser control it doesn't.

Can you please post full project example?

Thanks.


这篇关于如何确保在浏览器控件中引发MSGestureHold事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆