问题标签 [wkurlschemehandler]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
180 浏览

swift - 如何使用 WKURLSchemeHandler 提供大文件?

WKURLSchemeHandler用来提供无法由WkWebView. 虽然它适用于像视频这样的小文件,但当它必须提供像视频这样的大文件时,它会完全冻结应用程序。

现在,我正在一步读取完整文件,这不适合重要文件。

我应该怎么做才能避免这种情况?有没有办法“流式传输”文件的内容?

0 投票
1 回答
2000 浏览

javascript - Swift——进入 WKURLSchemeHandler 的值第一次是正确的,然后永远不会改变

我是 Swift 编程的新手,并且可能正在使用一些构造,该构造在设置一次后使值不可变。我有一个运行 JavaScript webapp 的 WKWebView,并且在那个 JS 中,一个 URL 被这样调用:

这反过来会在我的 Swift 代码中触发下面的扩展。麻烦的是,第一次调用扩展时,它有来自 JS 的正确 URL;但在那之后,第一个 URL 似乎以某种方式“卡住”了,并且无论何时再次调用它,它都会继续打印第一个 URL 值,而不是来自任何后续调用的值,这些调用中包含不同的信息。

我知道 JS 正在发送唯一信息,因为当我关闭应用程序并重新启动它时,它第一次再次具有唯一值,但此后任何时候再次运行时都会继续显示第一个唯一值。有一些我不理解的日志文件条目(第二次尝试后 09:42:01 的 4):

这些日志文件条目可能解释了它失败的原因,但我不知道如何修复它。任何想法我做错了什么?

0 投票
2 回答
4744 浏览

javascript - 如何拦截 WKWebView 请求以检测哪些本地资源文件(css、js、png、...)与 HTML 文件一起加载?

我有一个 HTML 文件,其中包含本地资源文件,例如其内容中的 css、js 和 png 文件。这些本地资源文件为 zip 格式。我的应用程序使用 WKWebView 来显示这个 html 文件。我想找到一种解决方案来拦截 Web 视图请求,以检测哪些本地资源文件与该 html 文件一起加载 -> 如果它们仍然是 zip 格式,则解压缩它们。

我的 HTML 数据内容包含数千个这些本地资源文件,因此我无法在显示内容之前将它们全部解压缩。使用 UIWebView,我们使用 NSURLProtocol 子类来拦截请求,检测本地资源文件并根据用户正在查看的 html 页面按需解压缩。

将 UIWebView 转换为 WKWebView 时遇到此问题。类似的问题在这里发布:https ://forums.developer.apple.com/thread/87474

=======更新=======>

我通过使用WKURLSchemeHandler 弄清楚了。

注意:您需要将文件方案更改为自定义方案才能使用 WKURLSchemeHandler,因为它不适用于文件、http、https 等标准方案。

1.向WKWebView注册自定义scheme

2. 将文件方案转换为自定义方案(x-file),然后用 WKWebView 加载它


3、实现WKURLSchemeHandler协议的2个方法,处理WKURLSchemeTask的3个委托方法。

0 投票
0 回答
364 浏览

ios - WKWebView 的 WKUrlSchemeHandler 和带有 Secure 属性的 Cookies

从 iOS 11 开始,您可以将WKURLSchemeHandler与 WKWebView 一起使用:

一种使用 WebKit 不知道如何处理的 URL 方案加载资源的协议。

如果您使用自定义方案 - 假设foobarhttps- WKWebView 似乎不会将其视为安全。

当接收到带有指令的服务器响应时,如果 Cookie 具有属性Set Cookie,则该 Cookie 永远不会附加到通过发送的请求。foobarhttpsisSecure:TRUE

是否有我缺少的 WkWebView 属性允许通过请求foobarhttps包含这些 Cookie?

更新(已关闭) 我误解了将 Cookie 的属性设置为 asubdomaindomain. 都与WKURLSchemeHandler.

无论如何,我在这里找到了答案。

0 投票
0 回答
557 浏览

ios - 如何在 WKWebView 的远程网页中加载本地 CSS?

更新的问题

我正在将我控制的远程页面加载到WKWebview我的应用程序中,并通过加载本地 CSS 和字体文件对其进行自定义。在页面加载时webView:didFinishNavigation:,我正在运行一些 JS 来注入一些style标签和一个link元素,这些标签和一个元素src通过myfile通过WKURLSchemeHandler. 似乎是Content Security Policy正在阻止加载本地文件。

我无法添加标头,因为我正在加载的页面位于 S3 存储桶中,但我已在服务器上添加了一个meta标签head(未注入 JS):

即使添加了这个,Web 视图也不会尝试加载本地 CSS - 查看 Safari Web 检查器,该link元素位于head但 CSS 文件未显示在网络选项卡上。在控制台中进行评估await fetch('otfile://myfile.css')会产生如下警告:

[阻止] https://my-bucket.s3.amazonaws.com/file.xhtml的页面不允许显示来自 otfile://file.css 的不安全内容。

可以在此处找到演示该问题的示例项目。

我的问题现在变成了:如何向 WKWebView / WebKit 指定允许通过我的自定义 URL 方案加载任意内容?


原文见下文

我在 WKWebView 中加载一个远程页面,我需要通过在页面加载时使用 Javascript 注入对本地 CSS 文件的引用来自定义它的样式。我正在使用一个实现WKURLSchemeHandler来做到这一点。当我设置我的网络视图时:

然后,当页面加载后,在webView:didFinishNavigation

在我的代码中,为了简洁起见,我在这里省略了一个完成处理程序,并且在运行 JS 时没有报告错误。

我看到的是 Web 视图不会尝试加载 CSS 文件。它甚至从不调用方案处理程序,并且它不会在 Web Inspector 中显示为已尝试的请求。

我已尝试将href元素的 设置link为远程 URL,并且 Web 视图尝试加载它。我还尝试创建一个将其设置为URL 的img元素并将其附加到文档正文,然后 Web 视图尝试加载它。srcmyfile://

WKWebView当它打开的文档是 via 时,是否有属性或安全策略或阻止使用自定义方案处理程序加载 CSS 文档的东西https

更新:这似乎与此问题相同。

0 投票
0 回答
413 浏览

ios - 如何用内部资源文件替换 WKWebView 响应?

我有一个 WKWebView,它显示了项目资源文件中的 HTML 文件。除了资源文件之外,还有供 Web 视图使用的 CSS 和 JavaScript 文件。


旁注:这些 web 文件适用于已编译的 React web 应用程序。CSS / JS 文件在 index.html 文件中被引用,如 so<link href="/static/css/styles.css" rel="stylesheet"><script src="/static/js/code.js"></script> ,以及 JavaScript 的内联块,例如<script> /* some code here */ </script>


我被要求拦截 Web 视图的请求并将响应替换为项目文件中的资源。

我已经阅读并关注了Vikash关于Intercept request with WKWebView的回答, 我设法看到了请求,我从请求中获得了 CSS / JS 文件的 URL 路径,我创建了一个新的 URLResponse,但没有任何东西让 Web 视图显示它。下面的代码来自另一个 SO 问题,代表我们的 ViewController 到 WKURLSchemeHandler 的扩展。在启动 urlSchemeTask 函数中,我得到了文件的 URL,创建了一个新的 URLResponse 并将其放在 urlSchemeTask 委托方法中,但什么也没做。(已编辑)

下面的代码来自另一个 SO 问题,它代表了我们的 ViewController 到WKURLSchemeHandler的扩展。在start urlSchemeTask函数中,我得到了文件的 URL,创建了一个新的 URLResponse 并将其放在urlSchemeTask 委托方法中,但什么也没做。

我在网上搜索了很多,但找不到合适的解决方案。

期待听到更多的解决方案!

0 投票
1 回答
581 浏览

ios - 如何在 cordova-ios 6.1.0 中实现原生 WKURLSchemeHandler

我正在开发一个 cordova ios (6.1.0) 项目,我想实现一个原生 WKURLSchemeHandler 来拦截自定义方案处理以解决我的 cors 问题。

详细我想做类似的事情:https ://medium.com/@kumarreddy_b/custom-scheme-handling-in-uiwebview-wkwebview-bbeb2f3f6cc1

在 iOS 11 之前,我们没有任何系统 API 来拦截来自 WKWebView 的事件。在 iOS 11 中,我们为 WKWebView 提供了一个名为 WKURLSchemeHandler 的新 API,以使我们的生活更简单。

这意味着如果您想自己处理一些请求,那么只需定义自定义方案并将其设置为 WKWebViewConfiguration。

我的自定义方案是 app://myapp,但我需要实现 WKURLSchemeHandler 并将其注册到 WKWebViewConfiguration。

有没有办法在cordova上实现本机ios代码?

0 投票
0 回答
50 浏览

ios - 在评估Javascript期间未调用 WKURLSchemeHandler 委托

我正在加载将首先加载的本地 html 文件,然后我将不得不加载仅在 html 完全加载后在本地也可用的图像。因此,我正在使用 id 和 evaluateJavascript 为图像标签设置 src。加载此 evaluateJavascript 时不会调用 WKURLSchemeHander 委托。只有在调用 loadFile 或 loadHTMLString 时才会调用它。如何在 evaluateJavascript 函数期间调用此委托并将图像加载到 WKWebview?

0 投票
1 回答
681 浏览

ios - iOS - WKURLSchemeHandler 未在自定义方案上调用

我想使用WKWebViewWKURLSchemeHandler捕获一些带有自定义方案的链接。为了理解它是如何工作的,我用一个包含自定义方案的本地 html 文件制作了一个简单的项目(在 Objective-C 中,对不起)

在我的ViewController,我初始化我的 webView 如下:

现在,这是我的自定义 SchemeHandler

使用上面的代码,当我点击我的 html 页面的自定义链接时,什么也没有发生。

我究竟做错了什么 ?我看不出我的错误……我在 Objective-C 方面还是个新手,或者准确地说,在使用了 10 年的 Android 之后,我有点生疏了。所以如果你能帮助我我会很高兴;)

0 投票
0 回答
38 浏览

ios - WKURLSchemeHandler 和 FormData

我开发混合应用程序。

当 JS 发送带有 FormData 的 XMLHTTPRequest 时,App WKURLSchemeHandler 自定义类接收带有请求的 WKURLSchemeTask,但请求中没有 HTTPBody 或 HTTPBodyStream。这两个属性的值都为零。

有谁知道 WKURLSchemeHandler 是否支持 FormData 作为请求正文?