首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android,YUI,Moodle

Android,YUI,Moodle
EN

Stack Overflow用户
提问于 2013-12-03 20:30:03
回答 1查看 463关注 0票数 1

我遇到的问题如下:

我有一个有两种不同模式的应用程序:一个用于浏览的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:

  1. POST https://[moodle网站]/存储库/存储库_ajax.php发布多部分表单数据
  2. 发布https://[moodle网站]/存储库/draftfiles_ajax.php发布一些参数
  3. 获取website]/draftfile.php/some_id/user/draft/some_id/somefilename.png https://[moodle
  4. 发布https://[moodle网站]/mod/quiz/processtritt.php返回HTML页面
  5. 获取https://[moodle网站]/mod/quiz/sumy.php返回HTML页面

这些脚本中有一些会返回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()。有人有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-04 14:59:19

获奖代码是:

代码语言:javascript
运行
复制
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()")调用该代码来调用该代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20361041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档