【发布时间】:2013-07-28 23:45:38
【问题描述】:
这似乎是一个奇怪的问题,但我很想知道它是否可行。我正在研究 POC,因此必须证明或反驳它是否有效。
Android 应用程序中的 UI 将是原生的(Java + XML 布局)+ 一些其他设备功能访问,例如(相机/文件系统等)。
我已经构建了一个 JS 库,其中包含一些执行 Ajax 发布和获取请求的函数。
在应用程序中,我有一个不可见的 Webview,我在其中加载了一个空白 HTML(引用这个 JS 库)。在那个 WebView 中,我注入了一个 JavascripInterface。所以,本质上,UI 是原生的,你永远不会看到 Webview。这只是一个主机,它提供对我的 JS 库对本机代码的访问。
现在,在我的 UI 上执行某些操作时,我调用 Webview 上的 JS 函数,该函数又尝试进行 ajax 调用(loadUrl 调用 ex.javascipt:functionName())。但是,这些调用失败了,没有任何可见的错误。
注意:如果我将它加载到我的桌面浏览器上,同样的 HTML 文件也可以工作。 AJAX 调用成功。
但是,当我通过 JavascriptInterface(或 webview.loadUrl() 调用)发起 Ajax 调用时,它们会失败,响应状态为 0。
除了 AJAX 之外的东西,比如简单的函数调用、警报和通过 javascript 接口进行的回调都可以正常工作。
问:我知道这是一种奇怪且不切实际的做事方式。但是,它/应该起作用吗?
更新:即使设置了
setBlockNetworkLoads(false),还是不行。
我尝试记录 JS 调用和错误,得到了这个错误。
请求头域 X-Requested-With 不被允许 访问控制允许标头。
知道如何解决这个问题吗?
【问题讨论】:
-
1.你有
android.permission.INTERNET的权限吗? 2. 将链接粘贴到您请求的页面或.html 文件的开头或WebView中加载的任何内容。 3. 您在使用:developer.android.com/reference/android/webkit/… -
可能是线程问题 - UI 线程(视图的)和用于 ajax 请求的线程之间的问题
-
我有权限。为什么我需要在这里使用 WebViewClient?
-
@uriz 不太明白你提到的问题。你能详细说明一下吗?
-
UI 在 UI 线程上运行。而且我假设您的回调在另一个线程上。从回调线程中,您需要显式使用 runOnUiThread 来“返回”到 UI。只是想确保问题确实与 ajax 失败有关,而不是其响应的呈现。
标签: android ajax webview cross-domain