无法通过脚本注入在某些网站上执行Javascript

时间:2018-02-08 15:46:48

标签: javascript html javascript-injection

我试图在页面加载/

之后将React脚本注入网站

我能够在大多数网站上使用它,例如 https://google.com https://discovercard.com https://stackoverflow.com https://capitalone.com

但是,当我在 https://chase.com https://bankofamerica.com 中执行相同的脚本时,我得到一个引用错误,我正在使用{转换JSX {1}}因为Babel.transform未定义。

然后可以在网络选项卡和DOM中看到所有必需的脚本。

如果HTML中有任何特定标记或属性阻止在这些网站上执行Javascript,有人可以告诉我。看起来银行网站这样做是为了防止外部Javascript。

以下是我在开发者控制台上尝试的代码

注意: Hello World!因Babel

而在5秒后出现
setTimeout

1 个答案:

答案 0 :(得分:2)

两个不起作用的网站正在使用requireJs,因此不是在窗口上加载模块,而是使用define加载它们。

简单的做法就是在脚本的其余部分之前调用define = undefined,它就像在其他网站上一样工作。为安全起见,UMD加载程序似乎也会检查exports和modules.exports,因此您可能还希望将它们设置为undefined。

define = undefined;
exports = undefined;
if (window.module) module.exports = undefined;

您正在使用的库使用通用模块定义打包在一起。这样他们就可以使用各种各样的模块加载器,例如requireJs。 UMD模式查找模块加载器定义的公共变量,因此通过将这些变量设置为undefined,可以使模块全局加载,并可以按脚本访问脚本。