在Greasemonkey中,如果用户脚本通过使用例如全局命名空间将内容添加到全局命名空间中@require react-15.1.0.js
,如果原始页面还包含React但旧版本(例如react-15.0.0.js
)会发生什么?全局名称是否以某种方式保存在不同的环境中,或者是否有可能通过重新定义全局名称来破坏页面(反之亦然)?
答案 0 :(得分:0)
不,他们不能发生冲突。我不清楚greasemonkey的执行模型的细节,但我进行了测试。 我创建了这个HTML文件,当单击一个按钮时,它使用 lodash :
<html>
<head>
<script src='https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.min.js'></script>
</head>
<body>
<input type='button' id="btn" value="Invoke lodash">
<script type="text/javascript">
el = document.getElementById("btn")
el.addEventListener('click',function (argument) {
console.log("3 =", _.add(1,2));
})
</script>
</body>
</html>
&#13;
我还创建了一个用户脚本,删除了_:
// ==UserScript==
// @name Test greasmonkey overriding
// @namespace gm-overriding
// @version 1
// @grant none
// ==/UserScript==
_ = null
console.log("here is _:", _);
&#13;
用户脚本不会影响lodash依赖关系,按钮点击仍然会打印预期的输出。