Enter the search from the home page of Baidu without loading the script
Closed this issue · 7 comments
Describe the bug
Enter the search from the home page of Baidu without loading the script
To Reproduce
Steps to reproduce the behavior:
- Go to 'https://www.baidu.com/'
- Input something
- Click on '百度一下'
- No script loaded
Expected behavior
The script is loaded and functioning properly
Desktop or Mobile (please complete the following information):
- OS: macOS
- Browser: Chrome
- Userscript Manager: Tampermonkey
- Userscript Version: v0.3.4
Workaround
Just reload the page
百度首页到搜索页脚本不会重载,搜索页重新搜索也不会重载,但是上述两种情况下,页面的title均会发生变动,所以可以通过监听document.head.title.innerHTML的变化来判断是否需要重载脚本,大致代码如下:
case 'baiduHomepage':
let title = document.getElementsByTagName("title")[0];
let oldTitle = title.innerHTML;
title.addEventListener("DOMSubtreeModified", function() {
if (oldTitle !== this.innerHTML) {
reloadContainer();
}
});
case 'baiduSearchpage':
loadContainer();
let title = document.getElementsByTagName("title")[0];
let oldTitle = title.innerHTML;
title.addEventListener("DOMSubtreeModified", function() {
if (oldTitle !== this.innerHTML) {
reloadContainer();
}
});
我个人不太用百度,有点懒得去修复这个问题
我个人不太用百度,有点懒得去修复这个问题
ok,那我改下,但是有个问题,百度重新搜索之后,页面的head都会刷新一遍,所以容器的样式需要重新引入,而vite-plugin-monkey只能通过import方式在文件头部引入样式,除非我直接将打包完成后生成的插入css样式的代码直接复制到main.js中用来重新引入一遍,如果你不介意的话,我就直接这样做了,或者有什么其它的办法可以使用类似import的方法在代码执行过程中引入样式吗?
应该有动态引入样式的方法吧,我还没有仔细找过。如果你找不到,也可以直接在 main.js 里写。未来有机会再重构吧。
我简单尝试了下,这样是可以动态引入样式
import('./style/xxx.css')
build 以后是这样
Promise.resolve().then(() => googleTop$1);
const googleTop = ".chat-gpt-container{\n max-width: 100%!important\n}\n";
const googleTop$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
__proto__: null,
default: googleTop
}, Symbol.toStringTag, { value: "Module" }));
我回来了。
很奇怪,在 v0.7.1 版本中,我尝试了很多次,已经无法复现这个问题。