如何在 iOS 中使用 WKWebView 将值动态传递到 iFrame

Posted

技术标签:

【中文标题】如何在 iOS 中使用 WKWebView 将值动态传递到 iFrame【英文标题】:How to dynamically pass a value into an iFrame using WKWebView in iOS 【发布时间】:2020-12-28 04:56:05 【问题描述】:

我正在尝试将 iFrame 与 WKWebView 一起使用,以加载流(主机)网站推荐的嵌入式音频播放器。

当我动态传递音轨 ID 时,我收到一条错误消息,提示 音频不可用或已被删除。但是,当我对音轨 id 进行硬编码时,它工作得非常好,我可以加载嵌入式播放器。

我想知道将参数动态传递给 iFrame 的正确方法是什么,以便我可以使用 WKWebView (Swift 5/ios 13+) 加载内容?

总结一下……

这不起作用:(动态传递 track-id)

htmlToLoad = "<iframe src=\"https://widget.podcastwebsite.com/player?track_id=\(track-id)\" width=\"100%\" height=\"50%\" frameborder=\"0\"></iframe>"

webView.loadHTMLString(htmlToLoad!, baseURL: nil)

...

这行得通:(硬编码 track-id)

htmlToLoad = "<iframe src=\"https://widget.podcastwebsite.com/player?track_id=12345\" width=\"100%\" height=\"50%\" frameborder=\"0\"></iframe>"

webView.loadHTMLString(htmlToLoad!, baseURL: nil)

这两个 htmlToLoad 变量之间的唯一区别是 track_id 的传递方式。

数据流是这样的,我下载了曲目的播放列表(通过 REST API 调用),然后传递获得的 track_id(当用户选择曲目时)以加载 iFrame(由主机提供)。

我已确保变量正确流过,并且 track-id 的值有效。

感谢我能得到的任何帮助。

【问题讨论】:

将track_id合并成字符串后打印URL,并与工作的URL字符串进行比较。 是的,track_id 从未设置过,它始终为空。 很高兴看到您解决了问题。 【参考方案1】:

找到一种可行的方法,

而不是“(变量)”:(旧方式)

htmlToLoad = "<iframe src=\"https://widget.podcastwebsite.com/player?track_id=\(track-id)\" width=\"100%\" height=\"50%\" frameborder=\"0\"></iframe>"

我将变量串联起来:(新方式)

htmlToLoad = "<iframe src=\"https://widget.podcastwebsite.com/player?track_id=" + track-id + "\" width=\"100%\" height=\"50%\" frameborder=\"0\"></iframe>"

这可以工作并保存变量值。

【讨论】:

以上是关于如何在 iOS 中使用 WKWebView 将值动态传递到 iFrame的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 应用程序 WkWebView 中调试 javascript?

从使用 wkwebview 返回值的 javascript 调用 swift 函数

如何调试iOS App中UIWebView和WKWebView使用的HTML文件

如何使用 iOS WKWebView 注入 JavaScript 回调来检测 onclick 事件?

在 iOS 中,当用户滚动浏览 WKWebView 时,如何检测屏幕上可见的 html 元素?

如何在 WKWebView swift 5 中更改字体大小?