【问题标题】:Call javascript function from inserting script tag通过插入脚本标签调用 javascript 函数
【发布时间】:2019-04-20 02:32:24
【问题描述】:
我有一个试图从脚本标签调用的函数
function foundElement(){
console.log(' in found element')
}
var ele = document.createElement("script")
ele.textContent = "foundElement()"
document.head.appendChild(ele)
我收到一个错误Uncaught ReferenceError: foundElement is not defined。但是,当我使用控制台时,该功能已定义。附上截图。
如何通过插入脚本标签来调用foundElement()?
【问题讨论】:
-
没有MCVE,每个人都必须随机猜测,这很糟糕。我的猜测是 1)您没有在内容脚本中执行此操作,或者 2)该站点在内容脚本运行后定义了函数。
标签:
javascript
google-chrome
google-chrome-extension
【解决方案1】:
function foundElement() {
console.log(' in found element')
}
var ele = document.createElement("script")
ele.textContent = "foundElement()"
document.head.appendChild(ele)
像魅力一样工作。你能描述一下你的实际问题吗?
【解决方案2】:
内容脚本 JS 和页面 JS 在不同的上下文中运行,具有不同的权限。他们唯一共享的是 DOM。您可以找到更多详细信息here
如果您需要在 Content-Script 和页面上下文之间共享函数 - 您也需要向页面注入函数。
例子:
var fn = function injectedFunction(seed) { console.log(seed,Math.random());}
var ele = document.createElement("script");
ele.textContent = fn+"console.log(injectedFunction(document.location));";
document.body.appendChild(ele);