web-dev-qa-db-ja.com

navigator.clipboardは未定義です

なぜnavigator.clipboard常に次のスニペットでundefined

var clipboard = navigator.clipboard;
if (clipboard == undefined) {
    console.log('clipboard is undefined');
} else {
    clipboard.writeText('stuff to write').then(function() {
        console.log('Copied to clipboard successfully!');
    }, function() {
        console.error('Unable to write to clipboard. :-(');
    });
}

クリップボードAPIの詳細については、 こちら をご覧ください。

Chromeバージョン:68.0.3440.106。

これはある時点で機能していたはずですが、もう機能していません。 この表 は、クリップボードAPIがChrome(しばらくの間)で実装されていることを示唆しているが、特定の この表 APIメソッドは、APIのどのメソッドもサポートされていないことを示唆していますか?

8
drmrbrewer

これには、HTTPSまたはlocalhost(またはChromeフラグを使用して無効化)のいずれか)の安全なOriginが必要です。ServiceWorkerと同様に、この状態はナビゲータのプロパティの有無によって示されますオブジェクト。

https://developers.google.com/web/updates/2018/03/clipboardapi

これは、インターフェースの[SecureContext]で仕様に記載されています。 https://w3c.github.io/clipboard-apis/#dom-navigator-clipboard

window.isSecureContextの状態を確認して、機能が利用できない理由であるかどうかを確認できます。 セキュアコンテキスト| MDN

そして、はい、 [〜#〜] hsts [〜#〜] を設定して、HTTPがHTTPSにリダイレクトされるようにする必要があります。

18
Josh Lee