#[repr(C)]pub struct WKContentWorld { /* private fields */ }
WKContentWorld
only.Expand description
A WKContentWorld object allows you to separate your application’s interaction with content displayed in a WKWebView into different roles that cannot interfere with one another.
WKContentWorld objects should be treated as namespaces. This is useful for keeping your application’s web content environment separate from the environment of the web page content itself, as well as managing multiple different environments within your own application. For example:
- If you have complex scripting logic to bridge your web content to your application but your web content also has complex scripting libraries of its own, you avoid possible conflicts by using a client WKContentWorld.
- If you are writing a general purpose web browser that supports JavaScript extensions, you would use a different client WKContentWorld for each extension.
Since a WKContentWorld object is a namespace it does not contain any data itself. For example:
- If you store a variable in JavaScript in the scope of a particular WKContentWorld while viewing a particular web page document, after navigating to a new document that variable will be gone.
- If you store a variable in JavaScript in the scope of a particular WKContentWorld in one WKWebView, that variable will not exist in the same world in another WKWebView.
See also Apple’s documentation
Implementations§
Source§impl WKContentWorld
impl WKContentWorld
pub unsafe fn new(mtm: MainThreadMarker) -> Retained<Self>
pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>
Sourcepub unsafe fn pageWorld(mtm: MainThreadMarker) -> Retained<WKContentWorld>
pub unsafe fn pageWorld(mtm: MainThreadMarker) -> Retained<WKContentWorld>
Retrieve the main world that page content itself uses.
When interacting with page content in a WKWebView using the page content world you can disrupt the operation of page content (e.g. by conflicting with variable names in JavaScript set by the web page content itself).
Sourcepub unsafe fn defaultClientWorld(
mtm: MainThreadMarker,
) -> Retained<WKContentWorld>
pub unsafe fn defaultClientWorld( mtm: MainThreadMarker, ) -> Retained<WKContentWorld>
Retrieve the default world for API client use.
When using a content world different from the page content world you can still manipulate the DOM and built-in DOM APIs but without conflicting with other aspects of the page content (e.g. JavaScript from the web page content itself) Repeated calls will retrieve the same WKContentWorld instance.
Sourcepub unsafe fn worldWithName(
name: &NSString,
mtm: MainThreadMarker,
) -> Retained<WKContentWorld>
pub unsafe fn worldWithName( name: &NSString, mtm: MainThreadMarker, ) -> Retained<WKContentWorld>
Retrieves a named content world for API client use.
Parameter name
: The name of the WKContentWorld to retrieve.
When using a content world different from the page content world you can still manipulate the DOM and built-in DOM APIs but without conflicting with other aspects of the page content (e.g. JavaScript from the web page content itself) As long as a particular named WKContentWorld instance has not been deallocated, repeated calls with the same name will retrieve that same WKContentWorld instance. Each named content world is distinct from all other named content worlds, the defaultClientWorld, and the pageWorld. The name can be used to keep distinct worlds identifiable anywhere a world might be surfaced in a user interface. For example, the different worlds used in your application will be surfaced by name in the WebKit Web Inspector.
Methods from Deref<Target = NSObject>§
Sourcepub fn doesNotRecognizeSelector(&self, sel: Sel) -> !
pub fn doesNotRecognizeSelector(&self, sel: Sel) -> !
Handle messages the object doesn’t recognize.
See Apple’s documentation for details.
Methods from Deref<Target = AnyObject>§
Sourcepub fn class(&self) -> &'static AnyClass
pub fn class(&self) -> &'static AnyClass
Dynamically find the class of this object.
§Example
Check that an instance of NSObject
has the precise class NSObject
.
use objc2::ClassType;
use objc2::runtime::NSObject;
let obj = NSObject::new();
assert_eq!(obj.class(), NSObject::class());
Sourcepub unsafe fn get_ivar<T>(&self, name: &str) -> &Twhere
T: Encode,
👎Deprecated: this is difficult to use correctly, use Ivar::load
instead.
pub unsafe fn get_ivar<T>(&self, name: &str) -> &Twhere
T: Encode,
Ivar::load
instead.Use Ivar::load
instead.
§Safety
The object must have an instance variable with the given name, and it
must be of type T
.
See Ivar::load_ptr
for details surrounding this.
Sourcepub fn downcast_ref<T>(&self) -> Option<&T>where
T: DowncastTarget,
pub fn downcast_ref<T>(&self) -> Option<&T>where
T: DowncastTarget,
Attempt to downcast the object to a class of type T
.
This is the reference-variant. Use Retained::downcast
if you want
to convert a retained object to another type.
§Mutable classes
Some classes have immutable and mutable variants, such as NSString
and NSMutableString
.
When some Objective-C API signature says it gives you an immutable class, it generally expects you to not mutate that, even though it may technically be mutable “under the hood”.
So using this method to convert a NSString
to a NSMutableString
,
while not unsound, is generally frowned upon unless you created the
string yourself, or the API explicitly documents the string to be
mutable.
See Apple’s documentation on mutability and on
isKindOfClass:
for more details.
§Generic classes
Objective-C generics are called “lightweight generics”, and that’s because they aren’t exposed in the runtime. This makes it impossible to safely downcast to generic collections, so this is disallowed by this method.
You can, however, safely downcast to generic collections where all the
type-parameters are AnyObject
.
§Panics
This works internally by calling isKindOfClass:
. That means that the
object must have the instance method of that name, and an exception
will be thrown (if CoreFoundation is linked) or the process will abort
if that is not the case. In the vast majority of cases, you don’t need
to worry about this, since both root objects NSObject
and
NSProxy
implement this method.
§Examples
Cast an NSString
back and forth from NSObject
.
use objc2::rc::Retained;
use objc2_foundation::{NSObject, NSString};
let obj: Retained<NSObject> = NSString::new().into_super();
let string = obj.downcast_ref::<NSString>().unwrap();
// Or with `downcast`, if we do not need the object afterwards
let string = obj.downcast::<NSString>().unwrap();
Try (and fail) to cast an NSObject
to an NSString
.
use objc2_foundation::{NSObject, NSString};
let obj = NSObject::new();
assert!(obj.downcast_ref::<NSString>().is_none());
Try to cast to an array of strings.
use objc2_foundation::{NSArray, NSObject, NSString};
let arr = NSArray::from_retained_slice(&[NSObject::new()]);
// This is invalid and doesn't type check.
let arr = arr.downcast_ref::<NSArray<NSString>>();
This fails to compile, since it would require enumerating over the array to ensure that each element is of the desired type, which is a performance pitfall.
Downcast when processing each element instead.
use objc2_foundation::{NSArray, NSObject, NSString};
let arr = NSArray::from_retained_slice(&[NSObject::new()]);
for elem in arr {
if let Some(data) = elem.downcast_ref::<NSString>() {
// handle `data`
}
}
Trait Implementations§
Source§impl AsRef<AnyObject> for WKContentWorld
impl AsRef<AnyObject> for WKContentWorld
Source§impl AsRef<NSObject> for WKContentWorld
impl AsRef<NSObject> for WKContentWorld
Source§impl AsRef<WKContentWorld> for WKContentWorld
impl AsRef<WKContentWorld> for WKContentWorld
Source§impl Borrow<AnyObject> for WKContentWorld
impl Borrow<AnyObject> for WKContentWorld
Source§impl Borrow<NSObject> for WKContentWorld
impl Borrow<NSObject> for WKContentWorld
Source§impl ClassType for WKContentWorld
impl ClassType for WKContentWorld
Source§const NAME: &'static str = "WKContentWorld"
const NAME: &'static str = "WKContentWorld"
Source§type ThreadKind = dyn MainThreadOnly
type ThreadKind = dyn MainThreadOnly
Source§impl Debug for WKContentWorld
impl Debug for WKContentWorld
Source§impl Deref for WKContentWorld
impl Deref for WKContentWorld
Source§impl Hash for WKContentWorld
impl Hash for WKContentWorld
Source§impl Message for WKContentWorld
impl Message for WKContentWorld
Source§impl NSObjectProtocol for WKContentWorld
impl NSObjectProtocol for WKContentWorld
Source§fn isEqual(&self, other: Option<&AnyObject>) -> bool
fn isEqual(&self, other: Option<&AnyObject>) -> bool
Source§fn hash(&self) -> usize
fn hash(&self) -> usize
Source§fn isKindOfClass(&self, cls: &AnyClass) -> bool
fn isKindOfClass(&self, cls: &AnyClass) -> bool
Source§fn is_kind_of<T>(&self) -> bool
fn is_kind_of<T>(&self) -> bool
isKindOfClass
directly, or cast your objects with AnyObject::downcast_ref
Source§fn isMemberOfClass(&self, cls: &AnyClass) -> bool
fn isMemberOfClass(&self, cls: &AnyClass) -> bool
Source§fn respondsToSelector(&self, aSelector: Sel) -> bool
fn respondsToSelector(&self, aSelector: Sel) -> bool
Source§fn conformsToProtocol(&self, aProtocol: &AnyProtocol) -> bool
fn conformsToProtocol(&self, aProtocol: &AnyProtocol) -> bool
Source§fn debugDescription(&self) -> Retained<NSObject>
fn debugDescription(&self) -> Retained<NSObject>
Source§impl PartialEq for WKContentWorld
impl PartialEq for WKContentWorld
Source§impl RefEncode for WKContentWorld
impl RefEncode for WKContentWorld
Source§const ENCODING_REF: Encoding = <NSObject as ::objc2::RefEncode>::ENCODING_REF
const ENCODING_REF: Encoding = <NSObject as ::objc2::RefEncode>::ENCODING_REF
impl DowncastTarget for WKContentWorld
impl Eq for WKContentWorld
Auto Trait Implementations§
impl !Freeze for WKContentWorld
impl !RefUnwindSafe for WKContentWorld
impl !Send for WKContentWorld
impl !Sync for WKContentWorld
impl !Unpin for WKContentWorld
impl !UnwindSafe for WKContentWorld
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<'a, T> MainThreadOnly for T
impl<'a, T> MainThreadOnly for T
Source§fn mtm(&self) -> MainThreadMarker
fn mtm(&self) -> MainThreadMarker
MainThreadMarker
from the main-thread-only object. Read more