加载新页面时如何在 WebView 中保留加载的 javascript 内容?
How to preserve loaded javascript content in a WebView when loading a new page?
在 WebView 中,我可以通过 运行 view.stringByEvaluatingJavaScriptFromString
加载 javascript 代码,或者直接在 JS 上下文中加载代码,您可以通过 view.mainFrame.javaScriptContext
.[=14 检索=]
但是,当我导航到新的 URL(无论是在 WebView.mainFrame 还是在 Javascript 中,例如通过设置 window.location
)时,我所有的 javascript 代码丢失,我必须重新加载它。当我在 JS 代码中导航并想在我的脚本中继续时,这尤其是一个问题。有没有办法避免清除所有 JS,特别是防止停止当前 JS 代码?
事实证明,无法阻止上下文重新创建。相反,我最终得到了一个独立的 JSContext 实例(手动创建)和一个我在该上下文中设置为变量的 WebView 实例。这样您就可以在独立上下文中 运行 您的 javascript 但使用 WebView 来完成所有网络工作。最大的缺点是您不能简单地对 DOM 进行操作,而是必须在您的上下文中提供操作函数(映射到 WebView 实例)或为所有 WebView class 创建扩展(DOM文档等)将他们的方法发布到 JS。这样你就可以直接对 swift/obj-c classes.
进行操作
在 WebView 中,我可以通过 运行 view.stringByEvaluatingJavaScriptFromString
加载 javascript 代码,或者直接在 JS 上下文中加载代码,您可以通过 view.mainFrame.javaScriptContext
.[=14 检索=]
但是,当我导航到新的 URL(无论是在 WebView.mainFrame 还是在 Javascript 中,例如通过设置 window.location
)时,我所有的 javascript 代码丢失,我必须重新加载它。当我在 JS 代码中导航并想在我的脚本中继续时,这尤其是一个问题。有没有办法避免清除所有 JS,特别是防止停止当前 JS 代码?
事实证明,无法阻止上下文重新创建。相反,我最终得到了一个独立的 JSContext 实例(手动创建)和一个我在该上下文中设置为变量的 WebView 实例。这样您就可以在独立上下文中 运行 您的 javascript 但使用 WebView 来完成所有网络工作。最大的缺点是您不能简单地对 DOM 进行操作,而是必须在您的上下文中提供操作函数(映射到 WebView 实例)或为所有 WebView class 创建扩展(DOM文档等)将他们的方法发布到 JS。这样你就可以直接对 swift/obj-c classes.
进行操作