簡體   English   中英

跨域 iframe 啟用 webUSB,無需共享權限

[英]Enable webUSB across cross-origin iframes without sharing permissions

我正在嘗試在包含來自不同來源的沙盒 iframe 的頁面上使用 webUSB。 我的目標是頂層頁面和每個嵌入式上下文都可以使用 webUSB,但不共享權限。 相反,他們每個人都應該調用requestDevice來訪問 USB 設備

默認情況下,頂級頁面的權限/webUSB 設備似乎由 iframe 共享。 這是我的測試設置。 頂級頁面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Top</title>
</head>
<body>
    <button id="button">request</button>
    
    <!-- iframe running on a different domain. See code below -->
    <iframe sandbox="allow-scripts" allow="usb" src="https://.../sub-frame.html"></iframe>

    <script>
        const button = document.getElementById('button');
        button.addEventListener('click', async () => {
            const device = await navigator.usb.requestDevice({ filters: [] });
            console.log(device);
        });
    </script>
</body>
</html>

子幀(來自不同的來源):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Embedded</title>
</head>
<body>
    <button id="button">Log</button>
    <script>
        const button = document.getElementById('button');
        button.addEventListener('click', async () => {
            const devices = await navigator.usb.getDevices();
            console.log(devices);
        });
    </script>
</body>
</html>

在 Chrome 中測試這個例子,當頂層頁面調用的requestDevice和我通過權限流時,iframe 現在也可以通過調用navigator.usb.getDevices()訪問設備。 我想阻止它。 相反,iframe 應該調用requestDevice然后獲取它自己的 USB 設備列表。

如果我改為使用allow="usb 'self'" ,則嵌入的頁面根本不再跨越 webUSB api。 我查看了 webUSB 和權限規范,但找不到任何方法來實現這一點。

我怎樣才能在嵌入式上下文中啟用 webUSB 之類的功能,但是以某種方式隔離每個嵌入式上下文,就像它是另一個頂級文檔一樣?

這種行為是由 Chromium 的一項功能引起的,該功能在過去幾年中已針對各種權限門控 API 實現,稱為“權限委托”。

我不知道 Chromium 項目是否會考慮在嵌入式框架中重新啟用 USB 設備權限的單獨存儲,但可以增強 API 以啟用對特定設備的更精細的權限委派,而不是授予父頁面的所有設備.

請在https://crbug.com/new上為此提出功能請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM