【发布时间】:2018-07-19 06:09:07
【问题描述】:
我试图在页面加载后将 React 脚本注入网站/
我能够让它在大多数网站上运行,例如 https://google.com、https://discovercard.com、https://stackoverflow.com、https://capitalone.com。
但是,当我在 https://chase.com 或 https://bankofamerica.com 中执行相同的脚本时,我在使用 Babel.transform 转换 JSX 时遇到参考错误,因为 @ 987654328@ 未定义。
然而,所有必需的脚本都已下载,如网络选项卡和 DOM 中所示。
如果 HTML 中有任何特定的标签或属性阻止在这些网站上执行 Javascript,请告诉我。似乎银行网站这样做是为了防止外部 Javascript。
这是我在开发者控制台上尝试的代码
注意:世界你好!由于setTimeout
const react = document.createElement("script");
react.src = "https://cdnjs.cloudflare.com/ajax/libs/react/16.2.0/umd/react.production.min.js"
document.body.appendChild(react);
const reactDom = document.createElement("script");
reactDom.src = "https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.2.0/umd/react-dom.production.min.js"
document.body.appendChild(reactDom);
const babel = document.createElement("script");
babel.src = "https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.26.0/babel.min.js"
document.body.appendChild(babel);
const rootDiv = document.createElement("div");
rootDiv.id = "app";
rootDiv.style="width: 100px; height: 100px; position: absolute; top: 0px; left: 0px; z-index: 999999";
document.body.appendChild(rootDiv);
setTimeout(() => {
const babelScript = document.createElement("script");
babelScript.type = "text/babel";
const jsxCode = "ReactDOM.render(<h1>Hello, world!</h1>, document.getElementById('app'));"
const babelTransformCode = Babel.transform(jsxCode, { presets: ["react"] } ).code;
eval(babelTransformCode);
}, 5000)
【问题讨论】:
-
您应该为要注入的脚本处理
onload事件,而不是任意超时。 -
同意,但我只是想测试一下,看看有什么不同。
-
这可能是不同的。我不只是为了笑而建议它:p
-
你的意思是脚本需要时间来加载?我不这么认为,我尝试了 25 秒的超时,仍然没有骰子,我可以看到脚本正在从网络选项卡加载。使用
fetch也不起作用。 -
嗯,这是一个建议,你可能是对的,它不会解决它。我实际上并不太介意尝试帮助您将脚本注入银行网站。我很高兴有一个日志,以防万一需要它作为证据:)
标签: javascript html javascript-injection