昨天想了下开发监控模块的思路,有了大致的实现方法,今天都尝试了下,遇到一些问题,记录下:
<iframe <="" p="">
:src="dashboardURL"
width="800"
height="600"
>
Mixed Content: The page at 'https://localhost:3100/#/grafana/index' was loaded over HTTPS, but requested an insecure frame 'http://ip:3000/d/rYdddlPWk/node-exporter-full?orgId=1'. This request has been blocked; the content must be served over HTTPS.

浏览器报错2:
Refused to display 'http://192.168.64.150:3000/'in a frame because it set 'X-Frame-Options' to 'deny'
.

参考别人文章的解决方式:
1、允许跨域
[security.cors]enabled = trueallowed_origins = https://localhost:3100
2、允许匿名
[auth.anonymous]enabled = true
3、允许iframe
[rendering]iframe_allow_from = https://localhost:3100[rendering]allow_embedding = true
4、设置浏览器显示混合内容,就是没证书的内容也显示:
Chrome浏览器,输入
chrome://flags/#allow-insecure-localhost

设置无果。

npm config set registry https://registry.npmjs.org
tsimport { DataSource } from "@grafana/data";import { DataSourceAPI } from "@grafana/api-datasource";export class GrafanaAPIDatasource extends DataSourceAPI {constructor() {super({url: "http://your-grafana-url",basicAuth: "your-api-key"});}}
tsimport { GrafanaAPIDatasource } from "./GrafanaAPI";export const grafanaAPI = (): GrafanaAPIDatasource => new GrafanaAPIDatasource();
<template><a-spin:spinning="loading"><divref="panel" class="grafana-panel" ></a-spin></template><script lang="ts">import { defineComponent, ref, onMounted } from 'vue';import { PanelPlugin, PanelData, PanelEvents } from '@grafana/ui';import { grafanaAPI } from '@/datasources';export default defineComponent({name: 'GrafanaPanel',setup() {const panelData = newPanelData(grafanaAPI(), { uid: 'panel-uid' });const loading = ref(true);const panel =ref<PanelPlugin>();onMounted(async () => {panel.value = awaitpanelData.load();loading.value = false;});return {loading,panel};}});</script>
<grafana-panel >
<template><a-layout><a-layout-sider>Sidebar</a-layout-sider><a-layout><grafana-panel ></a-layout></a-layout></template><script>import GrafanaPanel from './GrafanaPanel.vue';export default {name: 'Home',components: {GrafanaPanel}}</script>
3、直接参考vben admin引入外部页面的方式:
const IFrame = () =>import('/@/views/sys/iframe/FrameBlank.vue');{path: 'doc',name: 'Doc',component: IFrame,meta: {frameSrc: 'https://vvbin.cn/doc-next/',title: t('routes.demo.iframe.doc'),},},
还是有点问题,只能再研究下。

4、最后也是目前选取的方式,直接跳转到指定地址,就是类似于超链接的,这么一想也挺好的,直接没有开发量,反正用的都是grafna的看板,还没有风险。


{path: 'http://garfana-ip ',name: 'DocExternal',component: IFrame,meta: {title: t('routes.demo.iframe.docExternal'),},}
直接就跳转了。
嗯,具体分享的内容就到这了,后面接着再研究研究。
文章转载自希里安,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




