You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android端Xamarin应用中ASP.NET页面部分JS函数无法调用求助

Android端Xamarin WebView相关问题排查建议

项目环境

Android NuGet包

<PackageReference Include="Plugin.FirebasePushNotification">
  <Version>3.4.35</Version>
</PackageReference>
<PackageReference Include="Xamarin.Firebase.Common">
  <Version>120.0.0.5</Version>
</PackageReference>
<PackageReference Include="Xamarin.Firebase.Iid">
  <Version>121.1.0.5</Version>
</PackageReference>
<PackageReference Include="Xamarin.Firebase.Messaging">
  <Version>122.0.0.5</Version>
</PackageReference>
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2578" />
<PackageReference Include="Xamarin.Essentials" Version="1.7.5" />

iOS NuGet包

<PackageReference Include="Plugin.FirebasePushNotification">
  <Version>3.4.35</Version>
</PackageReference>
<PackageReference Include="Xamarin.Firebase.iOS.CloudMessaging">
  <Version>4.3.0</Version>
</PackageReference>
<PackageReference Include="Xamarin.Firebase.iOS.Core">
  <Version>8.10.0.3</Version>
</PackageReference>
<PackageReference Include="Xamarin.Firebase.iOS.Installations">
  <Version>1.1.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Firebase.iOS.InstanceID">
  <Version>4.3.3</Version>
</PackageReference>
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2578" />
<PackageReference Include="Xamarin.Essentials" Version="1.7.5" />

问题现象

应用内嵌ASP.NET网页,仅Android端出现以下异常,iOS端完全正常:

  1. asp:Repeater生成的元素中,onclick调用的load()方法和<a>标签均无法打开绑定的目标URL(URL通过<%#Eval("URL")%>输出)。Repeater代码:
<asp:Repeater runat="server" ID="rep_menu">
    <ItemTemplate>
        <div onclick="load('<%#Eval("URL")%>', this);">
            <div class="cell enlaces-menu">
                <div class="imagen_enlaces"><%#Eval("image")%></div>
            </div>
            <a href='<%#Eval("URL")%>'>
                <div>
                    <%#Eval("Title")%>
                </div>
            </a>
        </div>
    </ItemTemplate>
</asp:Repeater>
  1. 按钮调用AgregarReservaPAGEMETHOD触发WebMethod完成服务器端记录添加、邮件发送后,回调中的window.location.reload()无法刷新页面。相关JS代码:
<script>
    function AgregarReservaPAGEMETHOD(_fecha, _lugar) {
        PageMethods.postback_AgregarReserva(_fecha, _lugar, document.getElementById("datosSelf").innerText, () => {
            window.location.reload();
        }, () => { window.location.reload(); });
    }
</script>

解决建议

针对URL无法打开的问题

  1. 检查WebView基础配置
    • 确保Android WebView已启用JavaScript:
      webView.Settings.JavaScriptEnabled = true;
      
    • 设置自定义WebViewClient,避免链接被系统浏览器拦截:
      webView.SetWebViewClient(new WebViewClient()
      {
          public override bool ShouldOverrideUrlLoading(WebView view, IWebResourceRequest request)
          {
              view.LoadUrl(request.Url.ToString());
              return true;
          }
      });
      
  2. 验证URL格式合法性
    • 检查<%#Eval("URL")%>输出的URL是否包含完整的http://或https://前缀,Android WebView对相对路径的兼容性弱于iOS,建议强制使用绝对路径。
  3. 简化load()函数测试
    • 临时替换load()函数为直接跳转逻辑,排查函数内部是否存在Android不兼容的代码:
      function load(url, elem) {
          window.location.href = url;
      }
      

针对window.location.reload()不生效的问题

  1. 强制绕过缓存刷新
    • 替换window.location.reload()为带时间戳的跳转,避免浏览器缓存影响:
      window.location.href = window.location.href + '?t=' + new Date().getTime();
      
  2. 确认回调是否正常触发
    • 通过Chrome DevTools(chrome://inspect)连接Android设备调试,在回调函数中添加console.log(),确认WebMethod执行完成后回调是否被触发。
  3. 禁用WebView缓存
    • 在Android项目中配置WebView禁用缓存:
      webView.Settings.CacheMode = CacheModes.NoCache;
      

内容的提问来源于stack exchange,提问作者Roberto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 03:24:54