我遇到的问题如下:
我有一个有两种不同模式的应用程序:一个用于浏览的WebView和一个定制的画布。自定义画布为语言位置测试捕获手写示例。这就是它的工作原理。用户通过WebView登录到Moodle。登录后,他们会导航到Moodle内部的一个测试。他们点击一个测试问题的链接,这将启动一个隐藏WebView并显示画布的意图。然后,用户在画布上写入(使用手写笔)。当用户完成他们的文章(或其他什么),他们按下一个按钮,上传一个图像文件到Moodle。我能够上传图片到一定程度,它让它们显示在HTML页面中,用户最初点击链接(见上面),并让Moodle将它们提交到永久存储,这就是问题所在。通常,这都是通过AJAX (实际上是AJAJ,因为它是JavaScript和JSON)完成的,当用户在这个组件上删除一个文件时,组件会刷新和上传文件。
问题是:我需要WebView,这样学生就可以通过Shibboleth登录Moodle了。但是,由于浏览器中的底层JavaScript对Moodle服务器进行AJAX调用,而且由于Android端无法访问DOM,所以我必须使用库来建立下面的一些连接,以保留WebView中的WebView页面的状态。
例如,在Windows上的桌面浏览器中,我使用WebScarab来监视浏览器的请求,这就是我所看到的:浏览器通过对以下脚本的连续五次调用将文件上传到Moodle:
这些脚本中有一些会返回JSON数据,因为它们是AJAX而不是HTML。最后两个调用(4和5)返回HTML。现在,我可以在WebView或Apache库中连续进行所有这些调用,但如果使用WebView,则在调用1-3中只将JSON数据返回给WebView (WebView将JSON数据视为一个页面,并显示它删除在其中显示的任何HTML页面)。如果我使用JavaScript库捕获和处理JSON数据,那么页面内部的JavaScript组件就不会被更新。如果我将调用拆分为只向WebView发送4和5调用,则WebView仅返回到考试的第一个问题,而Moodle的行为就好像我没有上传任何内容一样。
如果手动刷新(按下链接)页面中的JavaScript UI元素,则可以验证文件正在上载。但是,我不能指望学生这样做,因为这样做的链接非常小,而且并不明显,它可以进行刷新。我需要一种方法,以编程方式刷新这一个元素(它是YUI的一部分),或者让Android和Java侧更好地使用JavaScript/DOM。
我的问题是:是否有人知道一种方法: 1)使用YUI触发拖放事件到HTML页面中的元素,或者2)使用JSON数据并将其传递给HTML页面中的元素的方法。
我正把头撞在墙上想弄清楚。
好的,所以我发现:javascript:document.getElementsByClassName(\"[name of link here]\")[0].click()
在桌面上的Chrome中工作,但是如果我把它传递给WebView.loadURL(),它就不能工作了。我只需要能够在WebView中可靠地模拟单击事件。它似乎不支持click()
。有人有什么想法吗?
发布于 2013-12-04 14:59:19
获奖代码是:
el = document.getElementsByClassName("[some element]")[0];
var event = document.createEvent("MouseEvents");
event.initEvent("click", true, true);
el.dispatchEvent(event);
这将在[some element]
中选择链接,从而触发一个刷新FilePicker的AJAX请求。对于那些使用Moodle的人,我必须将上面的代码添加到与处理相同的测试问题中,以便通过将代码放入自己的函数并使用WebView.loadURL("javascript:myRefreshFunction()")
调用该代码来调用该代码。
https://stackoverflow.com/questions/20361041
复制相似问题