Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug Report] <img> 无法正确触发 urlProcessor #947

Open
3 tasks done
hbl917070 opened this issue Oct 12, 2024 · 4 comments
Open
3 tasks done

[Bug Report] <img> 无法正确触发 urlProcessor #947

hbl917070 opened this issue Oct 12, 2024 · 4 comments
Assignees
Labels
🚀enhancement New feature or request

Comments

@hbl917070
Copy link

Prerequisites

Describe the Bug

使用 md 的图片语法可以正确触发 urlProcessor,但使用 html 的图片语法则不行

重现方法:
在官网的范例网页使用下面的语法
可以看到 b.jpg 没有触发 urlProcessor

![](a.jpg) 

<img src="b.jpg"> 

2024-10-12 14-45-15

这个问题蛮严重的,一些服务的图片使用的是相对路径,或是本地档案的绝对路径,一定要经过 urlProcessor 处理才能正确显示

Reproduction Steps

No response

System Information

No response

Contributing

None

@Saraph1nes Saraph1nes self-assigned this Oct 21, 2024
@Saraph1nes Saraph1nes added the 🚀enhancement New feature or request label Oct 21, 2024
@lyzwg
Copy link

lyzwg commented Dec 24, 2024

    engine: {
      customSyntax: {
        replaceImgBlock: {
          syntaxClass: customBlockHookWithImg,
          force: false,
          before: 'htmlBlock',
        },
      },
    },
    
    
    
      const customBlockHookWithImg = Cherry.createSyntaxHook('replaceImgBlock', Cherry.constants.HOOKS_TYPE_LIST.PAR, {
afterMakeHtml(str) {
  return str.replace(this.RULE.reg,  (match, srcValue) => {

    let url;
    const result = getFileUrl({objectKey: srcValue}).then((res)=>{
      url=res.data;
    });
    return  match.replace(srcValue, "url");

  });
},
rule() {
  return {reg: /<img\s+[^>]*src="([^"]+)"[^>]*>|!\[([^\]]*)\]\(([^)]+)\)/gi,}; // 匹配 <img> 标签
},

});
我想自定义img标签处理 通过接口查询图片的临时访问地址 但是afterMakeHtml好像不能设置成异步的 导致我的getFileUrl无法拿到请求的结果

@sunsonliu
Copy link
Collaborator

我想自定义img标签处理 通过接口查询图片的临时访问地址 但是afterMakeHtml好像不能设置成异步的 导致我的getFileUrl无法拿到请求的结果

确实还不支持异步,我重新打开下这个issue,尝试使自定义回调支持异步。
在此之前,一种推荐的临时解决办法是:先渲染cherry之前,通过正则拿到所有图片的url,然后发起异步请求获取这些图片URL->真实url的map,然后再实例化cherry,并在回调函数里通过map替换对应的图片URL

@sunsonliu sunsonliu reopened this Dec 24, 2024
@lyzwg
Copy link

lyzwg commented Dec 27, 2024

另外我还有一个问题 customBlockHookWithImg每次编辑区的内容变化都会触发 如果我新增“123”的内容 “1”,“12”,“123”会分别触发三次customBlockHookWithImg 这种情况就会请求三次图片资源 有什么办法区分之后图片资源的src发生变化才触发customBlockHookWithImg吗

@sunsonliu
Copy link
Collaborator

另外我还有一个问题 customBlockHookWithImg每次编辑区的内容变化都会触发 如果我新增“123”的内容 “1”,“12”,“123”会分别触发三次customBlockHookWithImg 这种情况就会请求三次图片资源 有什么办法区分之后图片资源的src发生变化才触发customBlockHookWithImg吗

哦哦,一种比较便捷的方法是维护一个src的map,如{src1: new_src1, src2: new_src2, ...},然后customBlockHookWithImg根据map来判断需不需要重新调用getFileUrl

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🚀enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

4 participants