uni-app editor组件支持baseURI功能

发布于 1周前 作者 itying888 来自 Uni-App

uni-app editor组件支持baseURI功能

问题描述

官方的富文本editor组件,如果插入图片的代码为

<img src="/img/abc.jpg">

则图片是显示不出来的,必须要加域名,可是数据是存入到db中的,一般不会写死域名路径

希望能加入绑定的域名,这样默认能出图片

1 回复

在uni-app中,editor 组件用于提供一个富文本编辑器,让用户可以输入和编辑富文本内容。关于baseURI功能,这通常与HTML中的<base>标签相关,用于指定页面上所有相对URL的基准URL。然而,在uni-app的editor组件中,并没有直接提供baseURI属性。不过,我们可以通过一些间接的方式来实现类似的功能。

虽然uni-app的editor组件本身不直接支持baseURI,但我们可以利用JavaScript在内容插入前进行处理,确保所有相对URL都转换为绝对URL。下面是一个基本的实现思路,通过监听editor组件的input事件来捕获并处理输入内容:

<template>
  <view>
    <editor
      id="myEditor"
      v-model="content"
      @input="handleInput"
    ></editor>
  </view>
</template>

<script>
export default {
  data() {
    return {
      content: '',
      baseURI: 'https://example.com/' // 你的基准URL
    };
  },
  methods: {
    handleInput(e) {
      // 获取当前editor的内容
      let htmlContent = e.detail.html;

      // 使用正则表达式匹配所有的<a>标签和<img>标签的src/href属性中的相对URL
      let regex = /(<a\s[^>]*href=["']?)([^"'>]+["']?)([^>]*>)|(<img\s[^>]*src=["']?)([^"'>]+["']?)([^>]*>)/gi;
      htmlContent = htmlContent.replace(regex, (match, p1, p2, p3, p4, p5, p6) => {
        let url = p2 || p5;
        if (!/^https?:\/\//i.test(url)) {
          // 如果是相对URL,则转换为绝对URL
          url = this.baseURI + url;
        }
        if (p2) {
          return p1 + url + p3;
        } else {
          return p4 + url + p6;
        }
      });

      // 更新v-model绑定的内容
      this.content = htmlContent;
    }
  }
};
</script>

在这个例子中,我们监听了editor组件的input事件,当内容发生变化时,通过正则表达式匹配所有的<a>标签和<img>标签的hrefsrc属性。如果匹配到的URL是相对路径,我们就将其转换为以baseURI为基准的绝对路径。

请注意,这个实现方式是基于字符串处理的,可能不是最优雅或最高效的解决方案,但它提供了一个基本的思路来处理相对URL。在实际应用中,你可能需要根据具体需求对正则表达式和替换逻辑进行调整。

回到顶部