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

无法在iFrame里展示canister里的内容 #39

Open
zire opened this issue Jul 22, 2023 · 2 comments
Open

无法在iFrame里展示canister里的内容 #39

zire opened this issue Jul 22, 2023 · 2 comments

Comments

@zire
Copy link
Member

zire commented Jul 22, 2023

看起来,目前ICP还无法支持在iframe里展示canister内部的文件,譬如一个PDF。

官方论坛的帖子有讨论过:

这个缺陷直接影响就是Chinese Deck 网页无法在 iframe 或者 object tag里展示pdf 文件。

所以,短期内,只能先把文件放在 static/asset 文件夹里,然后通过 <anchor> tag 来提供一个下载链接。

长远的解决办法,是用markdown直接编辑presentation slides, 用 Marp, MDX,或者Reveal.js。

@zire
Copy link
Member Author

zire commented Jul 22, 2023

用了个hack暂时解决了这个问题。从安全的角度,ICP对iframe的使用做了一些限制:

https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Other_embedding_technologies

所以,ICP上的iframe,不能直接展示canister内部的文件。但是,ICP上的iframe,可以展示ICP网络外部文件(譬如一个Youtube的视频)。所以,可以用以下方式绕过ICP目前的限制:

  1. 把PDF文件放在 static/asset/
  2. <a>来引用这个PDF,deploy到主网后,产生一个恒定的URL
  3. 把这个恒定的URL,放在iframe里。对于这个iframe来说,这是一个来自自身的canister之外的一个链接,不受ICP协议的限制。

详情可见 #43 的使用情况。

@Junweif2
Copy link
Member

Junweif2 commented Jul 22, 2023

可以试下之前 PR#35 的方法,在本地网络部署是可以的:

需要统一把pdf等静态文件放在static目录下,然后在docusaurus配置文件中设置静态资源的索引目录,添加static,这样yarn build 之后这些静态资源会在build文件夹下都复制一份

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants