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

Pixel手机Firefox调用Navigator.share()无法共享文本问题排查

问题根因

这个问题是谷歌Pixel设备搭载的Firefox移动版的已知Web Share API兼容缺陷,并非业务逻辑写错:

  • 该版本Firefox在同时接收title/text/url三个独立分享参数时,会异常丢弃text字段的自定义内容,只把标题和链接传给分享目标。
  • 原有代码里用的移动设备UA检测正则是十多年前的旧规则,本身误判、漏判率很高,也没有针对这个特定兼容场景做分支处理,所以直接触发了浏览器bug。
  • 不需要额外用UA判断是不是移动设备,navigator.share接口本身只会在支持的浏览器环境下暴露,硬卡UA反而会让部分桌面端支持原生分享的浏览器用不了这个功能。
修复方案

直接替换现有shareNow函数即可,不需要改动其他业务逻辑:

async function shareNow() {
  const text_to_share = newSocialShareFormat();
  const shareUrl = "https://gtkmysteries.com/murdle";
  const shareTitle = 'MURDLE by G. T. Karber';

  // 检测是否为Firefox安卓版
  const isFirefoxAndroid = /firefox/i.test(navigator.userAgent) && /android/i.test(navigator.userAgent);

  // 支持原生分享就走原生逻辑
  if (navigator.share) {
    try {
      const sharePayload = isFirefoxAndroid 
        ? {
            title: shareTitle,
            // 火狐安卓兼容:把链接拼到文本末尾,不单独传url字段,绕开丢text的bug
            text: `${text_to_share}\n${shareUrl}`
          }
        : {
            title: shareTitle,
            text: text_to_share,
            url: shareUrl
          };
      await navigator.share(sharePayload);
      return;
    } catch (err) {
      // 用户取消分享、或者接口调用出错时,自动走兜底逻辑
      console.log('原生分享调用失败,走兜底', err);
    }
  }

  // 兜底逻辑:复制到剪贴板+显示第三方分享按钮
  try {
    await navigator.clipboard.writeText(`${text_to_share}\n${shareUrl}`);
  } catch (err) {
    console.log('剪贴板写入失败', err);
  }
  const share_buttons = document.getElementById("share-buttons");
  share_buttons.innerHTML = '<p style="text-align: center"><input TYPE="button" NAME="button" style="background: #A30B37" value="COPIED TO CLIPBOARD"></p><p style="text-align: center"><input TYPE="button" NAME="button" value="SHARE ON FACEBOOK" onClick="shareOnFB()"></p><p style="text-align: center"><input TYPE="button" NAME="button" value="SHARE ON TWITTER" onClick="shareOnTwitter()"></p>';
}

核心改动说明

  • 删掉了冗余老旧的UA移动设备检测逻辑,所有支持原生分享的浏览器不管是移动端还是桌面端都能正常调用。
  • 增加Firefox安卓的专属兼容判断,遇到存在bug的浏览器环境就把链接拼到自定义文本里,不单独传url字段,绕开浏览器丢弃text的问题。
  • 给原生分享、剪贴板写入都加了错误捕获,不会出现用户点了按钮没反应、控制台抛错的情况,就算原生分享用不了也会自动落到原有剪贴板+第三方分享的逻辑。
  • 把函数改成async异步写法,适配navigator.share和剪贴板API的Promise特性,逻辑更稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 18:57:25