share_target似乎被忽略或未执行

share_target seems to be ignored or not executed

提问人:Angled 提问时间:11/3/2023 更新时间:11/3/2023 访问量:20

问:

我尝试使用 share_target 创建一个 PWA,我可以在其中共享链接和文本。但出于某种原因,share_target似乎不起作用。PWA 安装正常。没有错误。在 Windows PC 上使用 Edge 安装后,我尝试从浏览器共享链接或 URL,我还获取了已安装的 PWA 作为共享目标的建议。如果我选择此选项,PWA 将启动。但是,不使用操作的 URL,而是仅调用start_url。不会向start_url追加任何参数。

manifest.json:

{
    "short_name": "TestPWA",
    "name": "TestPWA",",
    "id": "TestPWA",
    "display": "standalone",
    "orientation": "portrait-primary",
    "start_url": "./",
    "share_target": {
      "action": "testaction",
      "method": "POST",
      "enctype": "application/x-www-form-urlencoded",
      "params": {
        "title": "title",
        "text": "text",
        "url": "url"
      }
    }
  }

SW.js:

const CACHE_NAME = 'TestPWA-v1';
const urlsToCache = [
        'sw.js',
        'images/test.ico',
        'images/test.png',
        'css/test.css',
];

self.addEventListener('install', event => {
    skipWaiting();
    event.waitUntil(
        caches.open(CACHE_NAME).then(function(cache) {
            console.log('Opened cache');
            return cache.addAll(urlsToCache);
        })
    );
    console.log('worker installed');
});

self.addEventListener('activate', event => {
    var cacheWhitelist = ['TestPWA'];
    clients.claim();
    event.waitUntil(
        caches.keys().then(function(cacheNames) {
            return Promise.all(
                cacheNames.map(function(cacheName) {
                    if (cacheWhitelist.indexOf(cacheName) === -1) {
                        return caches.delete(cacheName);
                    }
                })
            );
        })
    );
    console.log('worker activated');
});

self.addEventListener('fetch', event => {
    console.log(event.request.method);
    console.log(event.request.url);

    event.respondWith(
        caches.match(event.request).then(function(response) {
            if (response) {
                return response;
            }
            return fetch(event.request);
        })
    );
});

self.addEventListener('push', event => {
    let notification = event.data.json();
    event.waitUntil(
        self.registration.showNotification(notification.title, {
            body: notification.url,
            icon: './images/test.png',
            requireInteraction: true
        }),
    );
});

self.addEventListener('notificationclick', (event) => {
    event.notification.close();
    event.waitUntil(clients.matchAll({
        type: "window",
    }).then((clientList) => {
        for (const client of clientList) {
            if (client.url === event.notification.body && "focus" in client) return client.focus();
        }
        if (clients.openWindow) return clients.openWindow(event.notification.body);
    }))
});

用于加载 Service Worker 的 JavaScript:

window.addEventListener("DOMContentLoaded", function() {
    const parsedUrl = new URL(window.location);
    console.log('Title shared: ' + parsedUrl.searchParams.get('title'));
    console.log('Text shared: ' + parsedUrl.searchParams.get('text'));
    console.log('URL shared: ' + parsedUrl.searchParams.get('url'));

    if ("serviceWorker" in navigator) {
        navigator.serviceWorker.register("smsw.js").then(
          registration => {
            console.log("worker registered", registration);
          },
          error => {
            console.error(`worker registration failed: ${error}`);
          },
        );
      } else {
        console.error("workers are not supported");
      }
}

有关注册和激活的控制台输出很好。Dev Console 上没有错误。在 fetch 函数中,我尝试查找,如果请求来自 share_target,但没有,我只看到“GET”作为开发控制台上的输出,没有“POST”,也没有“testaction”。

我需要一些帮助来找到问题所在。

javascript service-worker manifest.json web-share-target

评论


答: 暂无答案