этот документ предполагает, что я должен иметь возможность вводить значения в веб-страницу, отображаемую компонентом WebView, так что значение может использоваться при загрузке страницы:
https://github.com/react-native-community/react-native-webview/blob/master/docs/Guide.md#communicating -between- В частности, js -and-native
, приведенный ниже код показывает, как установить значение в объекте window
, но не показывает, как он используется:
import React, { Component } from 'react';
import { View } from 'react-native';
import { WebView } from 'react-native-webview';
export default class App extends Component {
render() {
const runFirst = `
window.isNativeApp = true;
true; // note: this is required, or you'll sometimes get silent failures
`;
return (
<View style={{ flex: 1 }}>
<WebView
source={{uri: 'my-url-here'}}
injectedJavaScriptBeforeContentLoaded={runFirst}
/>
</View>
);
}
}
страница, которую я загружаю, выглядит так:
<html>
<body>
<script>
alert(window.isNativeApp)
</script>
</body>
</html>
, которая отображает undefined
. Я также попробовал:
<html>
<body>
<script>
var fn = function() {
alert(window.isNativeApp)
}
document.addEventListener('DOMContentLoaded', fn, false)
</script>
</body>
</html>
с идентичными результатами. учитывая, что я должен иметь возможность отправлять значения веб-страницы, как я должен их использовать?
из моего package.json
:
"react-dom": "~16.9.0",
"react-native": "^0.62.1",
"react-native-webview": "^8.2.1",
Приложение I
на самом деле вышеприведенное, похоже, не работает вообще. если я попробую следующее:
const runFirst = `
console.log('INJECTION')
alert('INJECTION')
true; // note: this is required, or you'll sometimes get silent failures
`;
я не получу ни оповещения, ни следа в журнале. конечно, я не уверен, может ли alert()
работать до загрузки документа или журнал будет виден мне в выводе консоли обычного приложения
, напротив, injectedJavaScript
, кажется, работает , хотя после документа загружается, что означает, что во время выполнения <script>
в моем do c значение еще не было установлено