- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
var webView: WKWebView!
var oneWeek : String = "n/a"
var oneMonth : String = "n/a"
var sixMonths : String = "n/a"
var oneYear : String = "n/a"
func loadHtml() {
let htmlFile = Bundle.main.path(forResource: "subscriptionTerms", ofType: "html")
let html = try? String(contentsOfFile: htmlFile!, encoding: String.Encoding.utf8)
let cssFile = Bundle.main.path(forResource: "popup", ofType: "css")
let url = NSURL.fileURL(withPath: cssFile!)
webView.loadHTMLString(html!, baseURL: url)
webView.evaluateJavaScript("var oneWeek = \"\(oneWeek)\"; var oneMonth = \"\(oneMonth)\"; var sixMonths = \"\(sixMonths)\"; var oneYear = \"\(oneYear)\";") { (result, error) in
}
}
我有一个按钮可以单击,它通过将 View 的约束缩小到 0 来隐藏术语,再次单击它会将其扩展到原始大小。同时,按下此按钮时将调用 loadHTML() 函数。
但是第一次按下按钮时,我可以正确地看到显示的价格。
<html lang="en">
<head>
<link rel="stylesheet" type="text/css" href="popup.css">
</head>
<body>
<h4>Premium Subscription Terms</h4>
<ul>
<li>Length of subscriptions: One week (<span class="oneWeek"></span>)
...
<script type="text/javascript">document.querySelector('.oneWeek').innerHTML = oneWeek;</script>
</body>
</html>
第二次点击同一个按钮,变量为零。
我在 webView.evaluateJavaScript()
之前设置了一个断点,以确保不会以某种方式重置全局变量。这些值是确定的。但是为什么 evaluateJavaScript()
没有第二次在 HTML 中注入(inject)变量?
我是否必须事先清空/清除WKWebView
?
最佳答案
在我看来,在 javascript 中更新 var
的值是相当危险的。该脚本当时可能已经执行,更不用说 var
的其他 Javascript 怪癖了。理想情况下,您应该使用将新值作为参数的 javascript 函数传递值,例如:
function update(oneWeek, oneMonth) { // add other parameters
document.querySelector('.oneWeek').innerHTML = oneWeek;
}
然后:
webView.evaluateJavaScript("update(\"\(oneWeek)\", \"\(oneMonth)\");") { (result, error) in
问题的另一部分是 loadHTMLString
开始加载,但在调用 evaluateJavaScript
时我们不知道内容是否已经加载。理想情况下,您应该在 WKNavigationDelegate
方法之一中调用更新。
作为替代方法,如果您有 HTML,则可以在加载之前直接替换那里的值,例如将一些替换模板放在那里(例如 $ONE_WEEK
)。这可能更容易处理。
关于ios - WKWebView 中的 evaluateJavaScript() 仅在第一次运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49902840/
我在这个项目中使用 swift 4。我正在尝试使用 EvaluateJavascript() 函数在 WKWebView 中运行的网页上运行 javascript。我正在尝试一个简单的警报功能来启动以
我尝试在我的主线程中使用 evaluateJavascript 方法,它工作正常。但是如果我将函数移动到我的另一个线程(我有一个服务在后台运行等待消息)。它根本不起作用。所以我假设 evaluateJ
我有以下代码: HTML + JavaScript .color1{ color: #3D8BD0; } Mensage $("#mensagem").click(function(
如何在运行时执行 javascript 函数,加载聊天窗口的函数不会执行 func webView(_ webView: WKWebView, didFinish navigation: WKNavi
我正在尝试使用新的 evaluateJavascript Android 4.4 中的方法,但我得到的只是一个空结果: webView1.evaluateJavascript("return \"te
我正在向 javascript 函数发送一个值并得到一个结果。但是,当运行以下代码时,我收到“错误域 = WKErrorDomain 代码 = 5“JavaScript 执行返回了不受支持的类型的结果
我正在尝试通过在 kitkat 之后为 android 版本调用 evaluateJavaScript() 方法并使用 loadUrl("javascript:"+javascript ); 在 ki
我有一个 UIViewController,它有一个 WKWebView,它加载一个特定的 View ,其中有一个需要自动点击的按钮。为了解决这个问题,我使用了 WKNavigationDelegat
for (int i = 0; i page ()->mainFrame ()->evaluateJavaScript (QString ("constructFileName (%1).arg (c
为 Android webView 编写了一些渲染器。尝试像这样调用一些 javascript: if (Build.VERSION.SdkInt >= BuildVersionCodes.Kitka
我正在尝试使用 WKWebView.EvaluateJavaScript(string, WKJavascriptEvaluationResult) 从我的 javascript 代码中获取一个值返回
我是 Swift 开发的新手,我有一个正在开发的混合应用程序,我已经连接了身份验证。当用户使用设备上的指纹传感器进行身份验证时,我想触发 JS 或以其他方式与 WKWebView 交互......但出
我几周来一直在尝试解决这个问题,但不知道是什么导致了这个问题。在我的项目中,我使用 Android Webview 的 evaluateJavascript() 方法,如下所示: this.r
我有一个字符串化的 JSON 对象,我想将其作为字符串传递到我的 WebView 中。如果我的 JSON 字符串是像这样的简单的一级 JSON: JSONObject object = new JSO
我对从 evaluateJavascript 和 getElementById 返回的字符串有问题,其中返回的字符串使用斜线和引号格式化。 例如,我的 webview 中有一个元素,其 Id 为 us
我正在开发 Expo 的 React Native 应用程序。我将项目弹出到 ExpoKit 并添加了 react-native-wkwebview-reborn。我遇到了这个库的一些问题,因为总是出
目标是在包含在 WKWebView 中的网页中调用回调函数。 evaluateJavaScript 在其参数包含换行符时中断,这意味着永远不会调用回调函数。 这是为什么? userContentCon
我正在使用 WKWebView加载 html 页面并使用 evaluateJavaScript 执行 javascript 函数。 这是我的做法。 使用大量对 javascript 和 CSS 文件的
我正在尝试获取 WebView 的实例,以便我可以对其调用 evaluateJavascript()。我编写了一个自定义匹配器,然后尝试将 WebView 分配给静态变量,如下所示: public
我有一个在以下环境中工作的应用程序: 单点触控 2.1 MonoDevelop 2.4.2 MacOS 10.6.8 iOS SDK 4.3 同一个应用程序,迁移到 iOS 5.0/5.1 和 Mon
我是一名优秀的程序员,十分优秀!