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

静态资源路径替换问题 #78

Open
chengked opened this issue Aug 22, 2023 · 5 comments
Open

静态资源路径替换问题 #78

chengked opened this issue Aug 22, 2023 · 5 comments

Comments

@chengked
Copy link

问题描述:打包时homePage指定为绝对路径,项目中使用IPreFetchLibOptions.hook.beforeAppendAssetNode 替换掉域名,然后发现图片无法显示,如图
image
期待效果:静态资源路径可以被替换

@fantasticsoul
Copy link
Collaborator

收,下一个版本支持

@chengked
Copy link
Author

经过测试:以下代码可以实现远程库替换功能,经钟工提醒使用MutationObserver,简略实现,分享出来,加到./index.js文件中即可,如图:
image
代码如下:
var mutationObserver = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if (mutation.addedNodes.length === 0) return
// console.log(mutation);
mutation.addedNodes.forEach(addedNode =>{
// console.log('addedNode',addedNode.nodeName,addedNode)
if (addedNode.innerHTML) {
// 替换
addedNode.innerHTML = addedNode.innerHTML.replace('http://test-zxes.cc','http://test2-zxes.cc')
//addedNode
}
})
});
});
// 开始监听页面根元素 HTML 变化。
mutationObserver.observe(document.documentElement, {
// attributes: true, // 【是否监听属性变化】
// attributeFilter: undefined, //【监听的属性范围,如果设置为undefined | 没有设置表示监听全部的属性】
// attibuteOldValue: true, //【是否把 回调函数中的MutationRecord.oldValue 对象是否包含了更改前的数据
characterData: true, //【是否监听 内部子文本节点的数据发生变化】
// characterDataOldValue: true, // 【是否把 之前的数据发送给 MutationRrecord】
childList: true, //【是否 监听子节点的插入/删除】
subtree: true, // 【是否 把监听的范围扩展到内部的全部子孙节点】
});

@chengked
Copy link
Author

经过测试:以下代码可以实现远程库替换功能,经钟工提醒使用MutationObserver,简略实现,分享出来,加到./index.js文件中即可,如图: image 代码如下: var mutationObserver = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { if (mutation.addedNodes.length === 0) return // console.log(mutation); mutation.addedNodes.forEach(addedNode =>{ // console.log('addedNode',addedNode.nodeName,addedNode) if (addedNode.innerHTML) { // 替换 addedNode.innerHTML = addedNode.innerHTML.replace('http://test-zxes.cc','http://test2-zxes.cc') //addedNode } }) }); }); // 开始监听页面根元素 HTML 变化。 mutationObserver.observe(document.documentElement, { // attributes: true, // 【是否监听属性变化】 // attributeFilter: undefined, //【监听的属性范围,如果设置为undefined | 没有设置表示监听全部的属性】 // attibuteOldValue: true, //【是否把 回调函数中的MutationRecord.oldValue 对象是否包含了更改前的数据 characterData: true, //【是否监听 内部子文本节点的数据发生变化】 // characterDataOldValue: true, // 【是否把 之前的数据发送给 MutationRrecord】 childList: true, //【是否 监听子节点的插入/删除】 subtree: true, // 【是否 把监听的范围扩展到内部的全部子孙节点】 });

该测试代码在实际项目中存在一些问题,请谨慎使用

@chengked
Copy link
Author

我觉得我搞的有点花里胡哨了,现在改成在vue mounted里直接将资源replace掉了,暂时用一用,等官方大佬出版本

function replace (id, source, target) {
var elem = document.getElementById(id)
var innerHTML = elem.innerHTML
if (elem && innerHTML) {
document.getElementById(id).innerHTML = innerHTML.replace(source,
target)
}
}

@fantasticsoul
Copy link
Collaborator

我觉得我搞的有点花里胡哨了,现在改成在vue mounted里直接将资源replace掉了,暂时用一用,等官方大佬出版本

function replace (id, source, target) { var elem = document.getElementById(id) var innerHTML = elem.innerHTML if (elem && innerHTML) { document.getElementById(id).innerHTML = innerHTML.replace(source, target) } }

能达成目的就是好方法

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