embedClickListenersInPageSource static method
Embeds click listeners inside the page and calls Dart callback when triggered
Implementation
static String embedClickListenersInPageSource(
String pageUrl, String pageSource) {
return embedInHtmlSource(
source: pageSource,
whatToEmbed: '''
<base href="$pageUrl">
<script>
document.addEventListener('click', e => {
if (frameElement && document.activeElement && document.activeElement.href) {
e.preventDefault()
var returnedObject = JSON.stringify({method: 'get', href: document.activeElement.href});
frameElement.contentWindow.$webOnClickInsideIframeCallback && frameElement.contentWindow.$webOnClickInsideIframeCallback(returnedObject)
}
})
document.addEventListener('submit', e => {
if (frameElement && document.activeElement && document.activeElement.form && document.activeElement.form.action) {
e.preventDefault()
if (document.activeElement.form.method === 'post') {
var formData = new FormData(document.activeElement.form);
var returnedObject = JSON.stringify({method: 'post', href: document.activeElement.form.action, body: [...formData]});
frameElement.contentWindow.$webOnClickInsideIframeCallback && frameElement.contentWindow.$webOnClickInsideIframeCallback(returnedObject)
} else {
var urlWithQueryParams = document.activeElement.form.action + '?' + new URLSearchParams(new FormData(document.activeElement.form))
var returnedObject = JSON.stringify({method: 'get', href: urlWithQueryParams});
frameElement.contentWindow.$webOnClickInsideIframeCallback && frameElement.contentWindow.$webOnClickInsideIframeCallback(returnedObject)
}
}
})
</script>
''',
position: EmbedPosition.belowHeadOpenTag,
);
}