1
  1. I created a scene and webview1 element with:

    • mode: url
    • source: www.google.com

  2. created a task to show scene
  3. Now, I want to create a JavaScript task to send to the Webview:

    • $("#q").val("Chuck Norris");
    • $("button#search").click();

PS: I don't want to just execute Javascript, I want to execute it in the opened Webview.

4

1 回答 1

3

我真的不明白创建 webview 场景并对其采取行动的意义何在,当你需要的东西可以“默默地”实现时。您甚至无需查看即可查询网页并遍历其 DOM 结构。

Tasker 确实支持 JavaScript 和加载外部库。在这里查看更详细的解释:tasker.wikidot.com/userguide-en:javascript

或者,您可以试一试 SL4A:code.google.com/p/android-scripting/

您是否尝试过在 WebView 属性的 Page Loaded 事件中添加操作(Javascript 或 SL4A)?

// 编辑

@fredericoallan

您需要做/使用的是玩HTTP GETHTTP POST发送标头和处理会话(我推荐tasker插件:RESTask,因为它允许发送标头)。但首先要做的事情。

先决条件

login为了能够发送标头和设置会话,您需要在打开页面和/或单击按钮时找出正在发送的标头和 cookie 。要查看这一点(如果您使用的是 chrome),您可以使用 chrome 的内置开发人员工具。只需右键单击页面上的某处并选择“检查元素”。在出现的窗口中,转到“网络”选项卡

会议

只需刷新页面并观察network选项卡。列表上的第一个请求应该是GET方法和类型text/html。点击它。headers在右侧窗格中选择选项卡。您现在应该注意到,我们的会话 ID 存储在 cookie 下PHPSESSID。我们稍后会需要这些信息

标题

为了能够登录,您需要有一个开放的会话,否则服务器将拒绝您访问。我们已经检查了会话密钥的存储方式和位置,因此我们可以查看登录标头(我们需要知道您的用户名和密码是如何发送到服务器的)。

在开发人员工具仍然打开的情况下,单击login按钮。选项卡的内容network应该已更改。对我们来说有趣的是发送的第一个请求(index.php?act=login, 方法POST, 类型text/html)。点击后,我们应该会看到远程地址、请求 URL、请求方法以及下面的一些内容,Form Data其中包含用户名、密码、提交属性。

构建Tasker的任务

现在,收集了所有信息后,我们可以继续构建一个任务,该任务将使我们登录。

  1. 创建指向redmine.demo.org. 在服务器响应中,您将收到要设置的 HTML 标记、标题和 cookie。
  2. 从 cookie 中提取 %sessionID(使用变量搜索和替换或变量部分)
  3. 创建 HTTP POST 动作,指向https://www.untergrund.net/index.php?act=loginpost一个 header:Cookie=%sessionID和参数: username=%userid, password=%pass,PHPSESSID=%sessionID

您现在已登录。收到的响应将包含登录时显示的页面。

代码示例

HTTP loggin in (119)
A1: RESTask [ Configuration:REST call Package:com.freehaha.restask Name:RESTask Timeout (Seconds):30 ] 
A2: Test Variable [ Type:Length Data:%rthdr_set_cookie Store Result In:%sesslen ] 
A3: Variable Section [ Name:%rthdr_set_cookie From:1 Length:%sesslen-8 Adapt To Fit:Off Store Result In:%sessionID ] 
A4: RESTask [ Configuration:REST call Package:com.freehaha.restask Name:RESTask Timeout (Seconds):30 ] 
于 2014-11-21T18:07:21.057 回答