关于慕课向页面添加元素没反应的求助
# 关于慕课向页面添加元素没反应的求助在写慕课脚本的时候,发现一件奇怪的事情,以下是一个demo
```js
// ==UserScript==
// @name DEMO
// @namespace http://tampermonkey.net/
// @version 0.1
// @descriptiontry to take over the world!
// @author You
// @match https://www.icourse163.org/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=icourse163.org
// @grant GM_addStyle
// ==/UserScript==
(function() {
'use strict';
var divE = document.createElement('div');
var divId = document.createAttribute("id"); //创建属性
divId.value = 'bigBox'; //设置属性值
divE.setAttributeNode(divId); //给div添加属性
divE.innerHTML =`<div id="findMe">我在这里</div>`
document.body.append(divE)
GM_addStyle(`
#bigBox{
position:absolute;
top:100px;
left:300px;
width:300px;
background:white;
border:solid;
font-size:40px
}
`)
// Your code here...
})();
```
就干了一件事情,把盒子给加到body去,但是!
显示不出来,完完全全没有加进去,整个元素都搜不到
但是更加诡异的事情就是,如果我把下面的另一个脚本给他加进去,又可以正常append元素进去了!
补充脚本:
```js
// ==UserScript==
// @name 补充
// @version 0.1
// @description232
// @author Onion
// @match https://www.icourse163.org/*
// @require https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js
// ==/UserScript==
```
你没看错,就加了一个jQuery进去,但是必须是另一个独立的脚本加入,demo脚本加入就不行!
加了以后就可以看到了!(https://raw.githubusercontent.com/LiWeny16/-/main/source/%E5%8A%A0%E5%85%A5%E5%90%8E%E6%95%88%E6%9E%9C.png)
想问一下大佬们这是一个什么情况咧? 沙盒环境下的document可能指向的不是网页的document
解决方法是强制将document指向网页的document
脚本头需要额外声明一个权限
// @grant unsafeWindow
你可以尝试下在脚本开头加一行
const document=unsafeWindow.document;
导致这个问题的具体原理可以参考
[油猴脚本开发指南]油猴的本质以及document的处理(一)
https://bbs.tampermonkey.net.cn/thread-2494-1-1.html
(出处: 油猴中文网)
我测试了没有问题,看你的描述像是有其他代码重写了append方法,可能替换成了jquery的append,建议输出Element.prototype.append看看。添加元素我更习惯用appendChild,append的兼容性稍差,一些代码可能会尝试对其做polyfill,从而导致一些预期之外的结果。 steven026 发表于 2022-12-22 20:24
沙盒环境下的document可能指向的不是网页的document
解决方法是强制将document指向网页的document
脚本头需 ...
GG太牛啦!确实是这个原因导致的! cxxjackie 发表于 2022-12-22 21:07
我测试了没有问题,看你的描述像是有其他代码重写了append方法,可能替换成了jquery的append,建议输出Elem ...
appendChild也是不行的,这里是document指向的原因!
页:
[1]