<!--
{
  "availability" : [
    "iOS: 27.0.0 -",
    "iPadOS: 27.0.0 -",
    "macCatalyst: 27.0.0 -",
    "macOS: 27.0.0 -",
    "visionOS: 27.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "WebKit",
  "identifier" : "/documentation/WebKit/WKDOMNodeSnapshot",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "WebKit"
    ],
    "preciseIdentifier" : "c:objc(cs)WKDOMNodeSnapshot"
  },
  "title" : "WKDOMNodeSnapshot"
}
-->

# WKDOMNodeSnapshot

A `WKDOMNodeSnapshot` object contains a snapshot of a DOM node

```
class WKDOMNodeSnapshot
```

## Overview\discussion There are various ways that JavaScript executing inside web content results in some return value
being passed up to the WebKit application.
Examples include calls to `[WKWebView evaluateJavaScript:...]`, `[WKWebView callAsyncJavaScript:...]`, and the
body of a `WKScriptMessage`.

When application JavaScript returns a JavaScript value, the default behavior is to try to convert it to a foundational type.
e.g. a JavaScript Number becomes an NSNumber, or a JavaScript array becomes an NSArray, etc.

If the JavaScript calls `window.webkit.createNodeSnapshot(...)` then WebKit will create a snapshot representation of
that node as the return value.

The node is an opaque object as far as the application is concerned, but it can be used as an argument to future JavaScript programs
via `[WKWebView callAsyncJavaScript:...]`

Unlike `WKJSHandle` - which keeps an actual JavaScript object alive in its originating context - a `WKDOMNodeSnapshot` is not attached
to a live JavaScript object, and it can be used as an argument to a JavaScript program running in any context.
e.g. In a different frame, or after a navigation.

## Relationships

### Conforms To

[`CustomDebugStringConvertible`](/documentation/Swift/CustomDebugStringConvertible)

[`CustomStringConvertible`](/documentation/Swift/CustomStringConvertible)

[`CVarArg`](/documentation/Swift/CVarArg)

[`NSObjectProtocol`](/documentation/ObjectiveC/NSObjectProtocol)

[`Hashable`](/documentation/Swift/Hashable)

[`Equatable`](/documentation/Swift/Equatable)

### Inherits From

[`NSObject-swift.class`](/documentation/ObjectiveC/NSObject-swift.class)

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)