Android webview JavaScript加载URL设置变量sdk 24+;发布谷歌分析
在我的应用程序中,我需要在WebView上设置一个JavaScript变量,用于跟踪,JavaScript将用于保持本机分析跟踪和web跟踪同步。当我将compiledSdkVersion和targetSdkVersion设置为23时,它当前正在工作 在Android webview JavaScript加载URL设置变量sdk 24+;发布谷歌分析,javascript,android,webview,google-analytics,Javascript,Android,Webview,Google Analytics,在我的应用程序中,我需要在WebView上设置一个JavaScript变量,用于跟踪,JavaScript将用于保持本机分析跟踪和web跟踪同步。当我将compiledSdkVersion和targetSdkVersion设置为23时,它当前正在工作 在OnPageStarted中,我有这个代码 String javaScript = String.format("javascript: var clientId = '%s';", nativeClientId); webView.loadUr
OnPageStarted
中,我有这个代码
String javaScript = String.format("javascript: var clientId = '%s';", nativeClientId);
webView.loadUrl(javaScript);
当我将compileSdkVersion和targetSdkVersion增加到24时,这将不再有效。Javascript表示未定义该变量。当我将版本设置回23时,它再次工作
我在WebView文档中找到,android.webkit.ValueCallback)
兼容性说明。针对N或更高版本的应用程序,JavaScript
空WebView中的状态不再在loadUrl(字符串)等导航中保持。例如,在调用loadUrl(字符串)之前定义的全局变量和函数将不存在于加载的页面中。应用程序应该使用addJavascriptInterface(对象、字符串)来跨导航持久化JavaScript对象
如何将我的javascript转换为使用AddJavascriptInterface
来设置此clientId,以便javascript仍然可以读取变量而无需更改web代码
任何建议或其他想法都会大有帮助 您使用的是
onPageStarted()
还是onPageFinished()
?clientId
何时读取?您可以切换到addJavascriptInterface()
,但这有其自身的问题,包括需要更改所有JavaScript代码(更改clientId
对其他内容的引用)。这在你的情况下可行吗?此外,您是否尝试切换到evaluateJavascript()
,以防这是loadUrl()
限制?客户端ID正在页面上以javascript读取,并且OnPageFinished()
已过了需要设置的时间。我尝试了evaluteJavascript()
,它在23时工作,但是当将dkversion
和targetSdkVersion
编译为24时,它也停止工作。是的,页面上的JavaScript代码无法更改,因此,我试图找到一种方法来设置JavaScript变量,但不知道是否有方法使用addJavascriptInterface()
“是的,页面上的JavaScript代码无法更改”--然后我怀疑您必须将targetSdkVersion
保持为23,直到可以修复为止。无论您使用addJavascriptInterface()
、WebMessage
还是WebMessagePort
,都不能从WebView
外部设置clientId
全局。