gpt4 book ai didi

java - 安卓、YUI、Moodle

转载 作者:行者123 更新时间:2023-11-30 03:14:31 25 4
gpt4 key购买 nike

我遇到的问题如下:

我有一个具有两种不同模式的应用程序:用于浏览的 WebView 和自定义 Canvas。自定义 Canvas 为语言分级考试捕获笔迹样本。这是它的工作原理。用户通过 WebView 登录 Moodle。登录后,他们导航到 Moodle 中的测验。他们单击测验问题之一上的链接,这会启动一个隐藏 WebView 并显示 Canvas 的 Intent。然后用户在 Canvas 上书写(使用触控笔)。当用户写完他们的文章(或其他)后,他们按下一个按钮,将图像文件上传到 Moodle。我能够将图像上传到某个点,它让它们显示在用户最初单击链接的 HTML 页面中(见上文),并让 Moodle 将它们提交到永久存储,这就是问题所在。通常这一切都是通过 AJAX 完成的(实际上是 AJAJ,因为它是 JavaScript 和 JSON),当用户在这个组件上放置文件时,组件会刷新并上传文件。

问题是:我需要 WebView 以便学生可以通过 Shibboleth 登录 Moodle。但是因为浏览器中的底层 JavaScript 对 Moodle 服务器进行 AJAX 调用,并且由于 Android 的 Java 端无法访问 DOM,所以我使用 Apache HTTP 组件库来建立下面的一些连接,基本上是为了保留WebView 中 HTML 页面的状态。

例如,在 Windows 上的桌面浏览器中,我使用 WebScarab 来监视浏览器的请求,这就是我所看到的:浏览器通过对以下脚本的五次连续调用将文件上传到 Moodle:

  • POST https://[moodle website]/repository/repository_ajax.php [posts multipart form data]
  • POST https://[moodle 网站]/repository/draftfiles_ajax.php [发布一些参数]
  • GET https://[moodle website]/draftfile.php/[some_id]/user/draft/[some_id]/[somefilename.png] [从 YUI 返回文件选择器的图像图标]
  • POST https://[moodle 网站]/mod/quiz/processattempt.php [返回 HTML 页面]
  • GET https://[moodle 网站]/mod/quiz/summary.php [返回 HTML 页面]

  • 如您所料,其中一些脚本返回 JSON 数据,因为它们是 AJAX 而不是 HTML。最后两个调用(4 和 5)返回 HTML。现在,我可以在 WebView 或 Apache HTTP 库中连续进行所有这些调用,但如果我使用 WebView 这样做,则只有 JSON 数据在调用 1-3 中返回到 WebView(WebView 将 JSON 数据视为页面并显示它,清除其中显示的任何 HTML 页面)。如果我使用 Java 中的 Apache HTTP 库捕获和处理 JSON 数据,则页面内部的 JavaScript 组件不会得到更新。如果我拆分调用以便仅将调用 4 和 5 发送到 WebView,则 HTML 只会将 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() .谁有想法?

    最佳答案

    中奖代码为:

    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()") 调用它来调用它。 .

    关于java - 安卓、YUI、Moodle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20361041/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com