webview.vue 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <template>
  2. <ie-page :fix-height="true">
  3. <ie-navbar v-if="showNavbar" :title="pageTitle" />
  4. <ie-auto-resizer>
  5. <web-view class="w-full h-full" :fullscreen="false" border="none" :src="webviewSrc" @load="handleLoad" />
  6. </ie-auto-resizer>
  7. </ie-page>
  8. </template>
  9. <script lang="ts" setup>
  10. import { useTransferPage } from '@/hooks/useTransferPage';
  11. const { prevData, transferBack } = useTransferPage();
  12. const showNavbar = ref(true);
  13. const webviewSrc = ref('');
  14. const pageTitle = ref('');
  15. const webviewParams = ref('');
  16. onLoad(() => {
  17. console.log(prevData.value)
  18. const { url, params, title, showNavbar: _showNavbar = true } = prevData.value
  19. pageTitle.value = title;
  20. showNavbar.value = JSON.parse(_showNavbar);
  21. try {
  22. uni.$ie.showLoading();
  23. if (params) {
  24. if (typeof params === 'string') {
  25. webviewParams.value = JSON.parse(params);
  26. } else {
  27. webviewParams.value = params;
  28. }
  29. webviewSrc.value = `${url}?${Object.entries(webviewParams.value).map(([key, value]) => `${key}=${value}`).join('&')}`;
  30. } else {
  31. webviewSrc.value = url;
  32. }
  33. } catch (error) {
  34. uni.$ie.showToast('参数错误');
  35. setTimeout(() => {
  36. transferBack();
  37. }, 500);
  38. }
  39. });
  40. const handleLoad = () => {
  41. uni.$ie.hideLoading();
  42. }
  43. </script>
  44. <style lang="scss">
  45. :deep(iframe) {
  46. width: 100% !important;
  47. height: 100% !important;
  48. border: none;
  49. z-index: 999;
  50. }
  51. </style>