问题标签 [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.
swift - 如何使用 WKURLSchemeHandler 提供大文件?
我WKURLSchemeHandler
用来提供无法由WkWebView
. 虽然它适用于像视频这样的小文件,但当它必须提供像视频这样的大文件时,它会完全冻结应用程序。
现在,我正在一步读取完整文件,这不适合重要文件。
我应该怎么做才能避免这种情况?有没有办法“流式传输”文件的内容?
javascript - Swift——进入 WKURLSchemeHandler 的值第一次是正确的,然后永远不会改变
我是 Swift 编程的新手,并且可能正在使用一些构造,该构造在设置一次后使值不可变。我有一个运行 JavaScript webapp 的 WKWebView,并且在那个 JS 中,一个 URL 被这样调用:
这反过来会在我的 Swift 代码中触发下面的扩展。麻烦的是,第一次调用扩展时,它有来自 JS 的正确 URL;但在那之后,第一个 URL 似乎以某种方式“卡住”了,并且无论何时再次调用它,它都会继续打印第一个 URL 值,而不是来自任何后续调用的值,这些调用中包含不同的信息。
我知道 JS 正在发送唯一信息,因为当我关闭应用程序并重新启动它时,它第一次再次具有唯一值,但此后任何时候再次运行时都会继续显示第一个唯一值。有一些我不理解的日志文件条目(第二次尝试后 09:42:01 的 4):
这些日志文件条目可能解释了它失败的原因,但我不知道如何修复它。任何想法我做错了什么?
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个委托方法。
ios - WKWebView 的 WKUrlSchemeHandler 和带有 Secure 属性的 Cookies
从 iOS 11 开始,您可以将WKURLSchemeHandler与 WKWebView 一起使用:
一种使用 WebKit 不知道如何处理的 URL 方案加载资源的协议。
如果您使用自定义方案 - 假设foobarhttps
- WKWebView 似乎不会将其视为安全。
当接收到带有指令的服务器响应时,如果 Cookie 具有属性Set Cookie
,则该 Cookie 永远不会附加到通过发送的请求。foobarhttps
isSecure:TRUE
是否有我缺少的 WkWebView 属性允许通过请求foobarhttps
包含这些 Cookie?
更新(已关闭)
我误解了将 Cookie 的属性设置为 asubdomain
与domain
. 都与WKURLSchemeHandler
.
无论如何,我在这里找到了答案。
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 视图尝试加载它。src
myfile://
WKWebView
当它打开的文档是 via 时,是否有属性或安全策略或阻止使用自定义方案处理程序加载 CSS 文档的东西https
?
更新:这似乎与此问题相同。
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
委托方法中,但什么也没做。
我在网上搜索了很多,但找不到合适的解决方案。
期待听到更多的解决方案!
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代码?
ios - 在评估Javascript期间未调用 WKURLSchemeHandler 委托
我正在加载将首先加载的本地 html 文件,然后我将不得不加载仅在 html 完全加载后在本地也可用的图像。因此,我正在使用 id 和 evaluateJavascript 为图像标签设置 src。加载此 evaluateJavascript 时不会调用 WKURLSchemeHander 委托。只有在调用 loadFile 或 loadHTMLString 时才会调用它。如何在 evaluateJavascript 函数期间调用此委托并将图像加载到 WKWebview?
ios - iOS - WKURLSchemeHandler 未在自定义方案上调用
我想使用WKWebView
并WKURLSchemeHandler
捕获一些带有自定义方案的链接。为了理解它是如何工作的,我用一个包含自定义方案的本地 html 文件制作了一个简单的项目(在 Objective-C 中,对不起)
在我的ViewController
,我初始化我的 webView 如下:
现在,这是我的自定义 SchemeHandler
使用上面的代码,当我点击我的 html 页面的自定义链接时,什么也没有发生。
我究竟做错了什么 ?我看不出我的错误……我在 Objective-C 方面还是个新手,或者准确地说,在使用了 10 年的 Android 之后,我有点生疏了。所以如果你能帮助我我会很高兴;)
ios - WKURLSchemeHandler 和 FormData
我开发混合应用程序。
当 JS 发送带有 FormData 的 XMLHTTPRequest 时,App WKURLSchemeHandler 自定义类接收带有请求的 WKURLSchemeTask,但请求中没有 HTTPBody 或 HTTPBodyStream。这两个属性的值都为零。
有谁知道 WKURLSchemeHandler 是否支持 FormData 作为请求正文?