| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- /*
- * Copyright (C) 2014 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
- #import <WebKit/WKFoundation.h>
- #import <Foundation/Foundation.h>
- #import <WebKit/WKPreviewActionItem.h>
- NS_ASSUME_NONNULL_BEGIN
- @class WKFrameInfo;
- @class WKNavigationAction;
- @class WKOpenPanelParameters;
- @class WKPreviewElementInfo;
- @class WKSecurityOrigin;
- @class WKWebView;
- @class WKWebViewConfiguration;
- @class WKWindowFeatures;
- #if TARGET_OS_IOS
- @class WKContextMenuElementInfo;
- @class UIContextMenuConfiguration;
- @protocol UIContextMenuInteractionCommitAnimating;
- #endif
- /*! A class conforming to the WKUIDelegate protocol provides methods for
- presenting native UI on behalf of a webpage.
- */
- @protocol WKUIDelegate <NSObject>
- @optional
- /*! @abstract Creates a new web view.
- @param webView The web view invoking the delegate method.
- @param configuration The configuration to use when creating the new web
- view. This configuration is a copy of webView.configuration.
- @param navigationAction The navigation action causing the new web view to
- be created.
- @param windowFeatures Window features requested by the webpage.
- @result A new web view or nil.
- @discussion The web view returned must be created with the specified configuration. WebKit will load the request in the returned web view.
- If you do not implement this method, the web view will cancel the navigation.
- */
- - (nullable WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures;
- /*! @abstract Notifies your app that the DOM window object's close() method completed successfully.
- @param webView The web view invoking the delegate method.
- @discussion Your app should remove the web view from the view hierarchy and update
- the UI as needed, such as by closing the containing browser tab or window.
- */
- - (void)webViewDidClose:(WKWebView *)webView API_AVAILABLE(macos(10.11), ios(9.0));
- /*! @abstract Displays a JavaScript alert panel.
- @param webView The web view invoking the delegate method.
- @param message The message to display.
- @param frame Information about the frame whose JavaScript initiated this
- call.
- @param completionHandler The completion handler to call after the alert
- panel has been dismissed.
- @discussion For user security, your app should call attention to the fact
- that a specific website controls the content in this panel. A simple forumla
- for identifying the controlling website is frame.request.URL.host.
- The panel should have a single OK button.
- If you do not implement this method, the web view will behave as if the user selected the OK button.
- */
- - (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler;
- /*! @abstract Displays a JavaScript confirm panel.
- @param webView The web view invoking the delegate method.
- @param message The message to display.
- @param frame Information about the frame whose JavaScript initiated this call.
- @param completionHandler The completion handler to call after the confirm
- panel has been dismissed. Pass YES if the user chose OK, NO if the user
- chose Cancel.
- @discussion For user security, your app should call attention to the fact
- that a specific website controls the content in this panel. A simple forumla
- for identifying the controlling website is frame.request.URL.host.
- The panel should have two buttons, such as OK and Cancel.
- If you do not implement this method, the web view will behave as if the user selected the Cancel button.
- */
- - (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL result))completionHandler;
- /*! @abstract Displays a JavaScript text input panel.
- @param webView The web view invoking the delegate method.
- @param prompt The prompt to display.
- @param defaultText The initial text to display in the text entry field.
- @param frame Information about the frame whose JavaScript initiated this call.
- @param completionHandler The completion handler to call after the text
- input panel has been dismissed. Pass the entered text if the user chose
- OK, otherwise nil.
- @discussion For user security, your app should call attention to the fact
- that a specific website controls the content in this panel. A simple forumla
- for identifying the controlling website is frame.request.URL.host.
- The panel should have two buttons, such as OK and Cancel, and a field in
- which to enter text.
- If you do not implement this method, the web view will behave as if the user selected the Cancel button.
- */
- - (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(nullable NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString * _Nullable result))completionHandler;
- #if TARGET_OS_IPHONE
- /*! @abstract Allows your app to determine whether or not the given element should show a preview.
- @param webView The web view invoking the delegate method.
- @param elementInfo The elementInfo for the element the user has started touching.
- @discussion To disable previews entirely for the given element, return NO. Returning NO will prevent
- webView:previewingViewControllerForElement:defaultActions: and webView:commitPreviewingViewController:
- from being invoked.
-
- This method will only be invoked for elements that have default preview in WebKit, which is
- limited to links. In the future, it could be invoked for additional elements.
- */
- - (BOOL)webView:(WKWebView *)webView shouldPreviewElement:(WKPreviewElementInfo *)elementInfo API_DEPRECATED_WITH_REPLACEMENT("webView:contextMenuConfigurationForElement:completionHandler:", ios(10.0, 13.0));
- /*! @abstract Allows your app to provide a custom view controller to show when the given element is peeked.
- @param webView The web view invoking the delegate method.
- @param elementInfo The elementInfo for the element the user is peeking.
- @param defaultActions An array of the actions that WebKit would use as previewActionItems for this element by
- default. These actions would be used if allowsLinkPreview is YES but these delegate methods have not been
- implemented, or if this delegate method returns nil.
- @discussion Returning a view controller will result in that view controller being displayed as a peek preview.
- To use the defaultActions, your app is responsible for returning whichever of those actions it wants in your
- view controller's implementation of -previewActionItems.
-
- Returning nil will result in WebKit's default preview behavior. webView:commitPreviewingViewController: will only be invoked
- if a non-nil view controller was returned.
- */
- - (nullable UIViewController *)webView:(WKWebView *)webView previewingViewControllerForElement:(WKPreviewElementInfo *)elementInfo defaultActions:(NSArray<id <WKPreviewActionItem>> *)previewActions API_DEPRECATED_WITH_REPLACEMENT("webView:contextMenuConfigurationForElement:completionHandler:", ios(10.0, 13.0));
- /*! @abstract Allows your app to pop to the view controller it created.
- @param webView The web view invoking the delegate method.
- @param previewingViewController The view controller that is being popped.
- */
- - (void)webView:(WKWebView *)webView commitPreviewingViewController:(UIViewController *)previewingViewController API_DEPRECATED_WITH_REPLACEMENT("webView:contextMenuForElement:willCommitWithAnimator:", ios(10.0, 13.0));
- #endif // TARGET_OS_IPHONE
- #if TARGET_OS_IOS
- /**
- * @abstract Called when a context menu interaction begins.
- *
- * @param webView The web view invoking the delegate method.
- * @param elementInfo The elementInfo for the element the user is touching.
- * @param completionHandler A completion handler to call once a it has been decided whether or not to show a context menu.
- * Pass a valid UIContextMenuConfiguration to show a context menu, or pass nil to not show a context menu.
- */
- - (void)webView:(WKWebView *)webView contextMenuConfigurationForElement:(WKContextMenuElementInfo *)elementInfo completionHandler:(void (^)(UIContextMenuConfiguration * _Nullable configuration))completionHandler API_AVAILABLE(ios(13.0));
- /**
- * @abstract Called when the context menu will be presented.
- *
- * @param webView The web view invoking the delegate method.
- * @param elementInfo The elementInfo for the element the user is touching.
- */
- - (void)webView:(WKWebView *)webView contextMenuWillPresentForElement:(WKContextMenuElementInfo *)elementInfo API_AVAILABLE(ios(13.0));
- /**
- * @abstract Called when the context menu configured by the UIContextMenuConfiguration from
- * webView:contextMenuConfigurationForElement:completionHandler: is committed. That is, when
- * the user has selected the view provided in the UIContextMenuContentPreviewProvider.
- *
- * @param webView The web view invoking the delegate method.
- * @param elementInfo The elementInfo for the element the user is touching.
- * @param animator The animator to use for the commit animation.
- */
- - (void)webView:(WKWebView *)webView contextMenuForElement:(WKContextMenuElementInfo *)elementInfo willCommitWithAnimator:(id <UIContextMenuInteractionCommitAnimating>)animator API_AVAILABLE(ios(13.0));
- /**
- * @abstract Called when the context menu ends, either by being dismissed or when a menu action is taken.
- *
- * @param webView The web view invoking the delegate method.
- * @param elementInfo The elementInfo for the element the user is touching.
- */
- - (void)webView:(WKWebView *)webView contextMenuDidEndForElement:(WKContextMenuElementInfo *)elementInfo API_AVAILABLE(ios(13.0));
- #endif // TARGET_OS_IOS
- #if !TARGET_OS_IPHONE
- /*! @abstract Displays a file upload panel.
- @param webView The web view invoking the delegate method.
- @param parameters Parameters describing the file upload control.
- @param frame Information about the frame whose file upload control initiated this call.
- @param completionHandler The completion handler to call after open panel has been dismissed. Pass the selected URLs if the user chose OK, otherwise nil.
- If you do not implement this method, the web view will behave as if the user selected the Cancel button.
- */
- - (void)webView:(WKWebView *)webView runOpenPanelWithParameters:(WKOpenPanelParameters *)parameters initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSArray<NSURL *> * _Nullable URLs))completionHandler API_AVAILABLE(macos(10.12));
- #endif
- @end
- NS_ASSUME_NONNULL_END
|