2015-11-28 4 views

Répondre

1

Il n'y a nulle part un "drapeau opaque" magique. "Opaque" ici signifie simplement qu'il y a des données contenues dans l'objet jamais visibles. Vous pouvez toujours effectuer certaines opérations avec une instance CryptoKey - par ex. dans ce cas, stockez-le dans DB indexé ou envoyez-le à un autre contexte via postMessage().

Ceci est en contraste avec, par ex. un objet Blobtous les des données bloquées peuvent être inspectés soit directement via des attributs sur l'objet ou indirectement via un FileReader.

Un autre exemple serait opaque Response un objet en tant que résultat d'une opération inter-Fetch origine, qui peut être traité par un Service Worker mais où le corps ne peut pas être contrôlé. Donc "est-il un moyen de dire à JS si un objet est opaque?" - ça dépend. Si un objet est une instance de CryptoKey alors vous savez qu'il y a des données cachées, donc c'est opaque. Si un objet est une instance de Blob, alors vous savez qu'il existe un moyen d'accéder aux données, même si vous avez besoin d'autres API pour y accéder, il n'est donc pas opaque. Si un objet est une instance de Response, il peut être opaque, selon la source.

+0

Btw. La raison en est que j'essayais de trouver un moyen d'utiliser une librairie scala-js pour écrire de tels objets opaques dans IndexDB. La bibliothèque sérialisait ces objets et j'essayais de trouver une solution générale pour éviter une telle sérialisation pour des objets opaques. La réponse a été de supprimer le code de sérialisation et d'exiger que les objets JS purs soient écrits dans la base de données. Je l'ai fait ici https://github.com/bblfish/scalajs-rx-idb/ –