#android #reactjs #iframe #webview
Вопрос:
Я разрабатываю проект для приложения, которое будет отображать мое приложение react в веб-представлении. Приложение ReactJS отлично работает в webview, поэтому я предполагаю, что JS активирован в webview. Но я пытаюсь отобразить HTML-контент в кодировке base64, который я пытаюсь отобразить следующим образом;
<iframe src={`data:text/html;base64,${HtmlContent}`}/>
Этот подход прекрасно работает в браузере (Chrome), но он вообще не работает в webview.
Я использовал srcdoc
вместо src
этого . Но тогда я не могу postMessage
родить приложение ReactJS.
Есть ли способ работать srcdoc
в этом сценарии или в чем может быть проблема с iframe в webview?
Комментарии:
1. ты нашел способ?
2. Нет. Вместо этого я создаю функцию в объекте окна, например window.GetMessage (и т. Д.), Чем я могу использовать эту функцию в iframe. В iFrame вы можете назвать это так: window.top.GetMessage
Ответ №1:
К сожалению, мне не удалось работать с таким подходом. Но, поскольку я могу контролировать и то, и другое в iframe, я просто создал функцию в родительском элементе iFrame следующим образом;
useEffect(() => {
// Only create once
// Create a custom function and put it to the window object
window.handleResult = handler;
}, [])
Затем получите доступ к нему изнутри iFrame с помощью;
<script type="text/javascript">
window.top.handleResult({success: params.success, error: params.error})
</script>
На самом деле этот подход работал лучше. Если вам по какой-то причине нужен еще один вложенный iframe, вы можете получить эту функцию независимо от того, насколько она глубока, потому что содержимое iframe в любом случае создает «верхнее» окно.
Я делюсь этим, потому что эту проблему можно решить с помощью разных подходов. Может быть, не лучший способ, но это рабочий способ.