【问题标题】:Loading URL in WebView for Android 3.1 fails on device but works on emulator在 Android 3.1 的 WebView 中加载 URL 在设备上失败,但在模拟器上有效
【发布时间】:2011-10-21 21:23:06
【问题描述】:

我正在尝试将以下 URL 加载到 web 视图中:index.html?name

这适用于 Android 2.2 设备和模拟器,以及 Android 3.1 模拟器。但是,当我在我的 Android 3.1 银河选项卡上加载应用程序时,我遇到了一个错误:

网页不可用

位于 file:///android_asset/index.html?name 的网页可能暂时关闭,或者它可能已永久移动到新网址。

似乎它没有注册它是本地资产并且正在尝试为其访问网络。知道为什么会发生这种情况,并且仅在物理 3.1 设备上吗?如果我尝试仅加载 index.html,那么它在所有内容上都可以正常工作。我对此表示怀疑,但它可能与问号有关吗?

提前致谢。

【问题讨论】:

    标签: android android-webview android-3.1-honeycomb


    【解决方案1】:

    我有同样的问题,但有一个解决方法......

    将 ?name 改为 #name 即可,因为 Android 支持命名锚。然后,您可以使用如下 JavaScript 来检测锚点并对其采取行动:

    if (window.location.href.search('#name') > 0) 
    {
      // Do something
    }
    

    【讨论】:

      【解决方案2】:

      我想你已经回答了你自己的问题。通过 HTTP,'?'在 URL 中用于将 URL 参数与主 URL 分开;虽然有趣的是,这适用于模拟器中的 file:///android_asset,但我不愿称其为错误。

      如果您需要将参数传递给 HTML 页面(可能要使用 javascript),一种选择是使用锚语法(例如 file:///android_asset/index.html#name

      【讨论】:

      • 谢谢!使用锚语法将是首选方式。
      【解决方案3】:

      根据标准,file:// URL 不支持查询字符串,例如您的 ?name。所以这几乎不是一个错误。你首先想要完成什么?您的代码的哪一部分应该处理名称?如果是 JavaScript,则加载页面,然后通过另一个带有 javascript: URL 的 loadUrl() 调用在其上调用一些 JavaScript。

      【讨论】:

      • 我有一些 javascript 正在运行,我需要为此传递一些数据,问题是 javascript 必须立即加载,因此在获取页面后我无法检索数据。不过感谢您的洞察力!
      最近更新 更多