gpt4 book ai didi

javascript - 在 iOS 应用程序中更改 WKWebView 的来源

转载 作者:技术小花猫 更新时间:2023-10-29 10:10:31 28 4
gpt4 key购买 nike

我有一个以 WKWebView 为中心的 iOS 混合应用程序,使用 loadFileURL 加载本地网络资源. WKWebView 使用 jQuery.ajax 通过 HTTPS 与后端 API 通信。该应用程序仅限移动设备,我希望 API 也“仅限移动设备”。也就是说,我想阻止 Chrome 和 Firefox 等浏览器使用该 API。

我的策略是在 API 响应上设置 Access-Control-Allow-Origin header ,如下所示:

Access-Control-Allow-Origin: app://myApp

我可以将 WKWebView 的来源更改为 app://myApp 以避免浏览器查询 API 吗?

最佳答案

案例:1

您可以在文档创建或文档完成加载时将 JS 注入(inject) WKWebview,并将 java 脚本 XMLHTTPRequest 打开方法与您的自定义实现 Hook ,以便为来自 WKWebView 的所有 AJAX 请求添加此自定义 header 。

示例代码

NSString *XMLHTTPRequestHookJSPath = [[NSBundle mainBundle] pathForResource:@"XMLHTTPRequestHook.js" ofType:nil];
NSString *kXMLHTTPRequestHookJS = [NSString stringWithContentsOfFile:XMLHTTPRequestHookJSPath encoding:NSUTF8StringEncoding error:NULL];
WKUserContentController *contentController = [[WKUserContentController alloc] init];
WKUserScript *script = [[WKUserScript alloc] initWithSource:kXMLHTTPRequestHookJS injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:NO];
[contentController addUserScript:script];
WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
configuration.userContentController = contentController;

self.lastUsedWebView = [[WKWebView alloc] initWithFrame:self.webContainerView.bounds configuration:configuration];
self.lastUsedWebView.navigationDelegate = self;

并且在 XMLHTTPRequestHook.js 中尝试将 XMLHttpRequest 与您的自定义实现 Hook 以添加此自定义 header 并回调原始打开方法。

案例 2如果您希望在 WKWebview 中加载 URLRequest 时添加此 header ,您可以将此 header 添加到 NSMutableRequest,如下所示,并在 WKWebview 中加载此请求。然而,使用这种方法,您可能不会在来自 WKWebview 的所有 AJAX 调用中都包含此 header 。

示例代码:

WKWebView * webView = /*set up your webView*/
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://example.com/index.html"]];
[request addValue:@"app://myApp" forHTTPHeaderField:@"Access-Control-Allow-Origin"];

// use stringWithFormat: in the above line to inject your values programmatically
[webView loadRequest:request];

希望这对您有所帮助。

关于javascript - 在 iOS 应用程序中更改 WKWebView 的来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35817899/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com