Javascript 在Safari中安装扩展后如何访问DOM
是否可以在完成Safari扩展的安装后访问DOM?Javascript 在Safari中安装扩展后如何访问DOM,javascript,dom,safari,safari-extension,Javascript,Dom,Safari,Safari Extension,是否可以在完成Safari扩展的安装后访问DOM? 我对访问安装此扩展的页面的HTML很感兴趣。您可以通过注入JS脚本来实现这一点。注入的脚本可以访问它们被注入的网页的DOM。注入的脚本与从网页主机执行的脚本具有相同的访问权限 你可以找到更多的信息 从注入脚本调用函数 列表项 使用扩展生成器创建扩展文件夹。抄袭 将列表保存到文本编辑器中,并另存为Injected.js和Global.html。 将Injected.js和Global.html拖到扩展文件夹中。点击 “扩展生成器”中的“扩展全局”
我对访问安装此扩展的页面的HTML很感兴趣。您可以通过注入JS脚本来实现这一点。注入的脚本可以访问它们被注入的网页的DOM。注入的脚本与从网页主机执行的脚本具有相同的访问权限 你可以找到更多的信息 从注入脚本调用函数 列表项 使用扩展生成器创建扩展文件夹。抄袭 将列表保存到文本编辑器中,并另存为Injected.js和Global.html。 将Injected.js和Global.html拖到扩展文件夹中。点击 “扩展生成器”中的“扩展全局”页面,然后选择“Global.html”。 单击“结束脚本”中的“新建脚本”,然后选择Injected.js。设定 扩展网站访问级别为所有。单击安装。 代码注入.js
var initialVal=1;
var calculatedVal=0 ;
function doBigCalc(theData) {
safari.self.tab.dispatchMessage("calcThis",theData);
}
function getAnswer(theMessageEvent) {
if (theMessageEvent.name === "theAnswer") {
calculatedVal=theMessageEvent.message;
console.log(calculatedVal);
}
}
safari.self.addEventListener("message", getAnswer, false);
doBigCalc(initialVal);
代码Global.html
<!DOCTYPE HTML>
<html>
<head>
<title>global HTML page</title>
<script type="text/javascript">
function bigCalc(startVal, event) {
// imagine hundreds of lines of code here...
var endVal = startVal + 2;
// return to sender
event.target.page.dispatchMessage("theAnswer", endVal);
}
function respondToMessage(theMessageEvent) {
if(theMessageEvent.name === "calcThis") {
var startVal=theMessageEvent.message;
bigCalc(startVal, theMessageEvent);
}
}
safari.application.addEventListener("message",respondToMessage,false);
</script>
</head>
<body>
</body>
</html>
您可以通过注入JS脚本来实现这一点。注入的脚本可以访问它们被注入的网页的DOM。注入的脚本与从网页主机执行的脚本具有相同的访问权限 你可以找到更多的信息 从注入脚本调用函数 列表项 使用扩展生成器创建扩展文件夹。抄袭 将列表保存到文本编辑器中,并另存为Injected.js和Global.html。 将Injected.js和Global.html拖到扩展文件夹中。点击 “扩展生成器”中的“扩展全局”页面,然后选择“Global.html”。 单击“结束脚本”中的“新建脚本”,然后选择Injected.js。设定 扩展网站访问级别为所有。单击安装。 代码注入.js
var initialVal=1;
var calculatedVal=0 ;
function doBigCalc(theData) {
safari.self.tab.dispatchMessage("calcThis",theData);
}
function getAnswer(theMessageEvent) {
if (theMessageEvent.name === "theAnswer") {
calculatedVal=theMessageEvent.message;
console.log(calculatedVal);
}
}
safari.self.addEventListener("message", getAnswer, false);
doBigCalc(initialVal);
代码Global.html
<!DOCTYPE HTML>
<html>
<head>
<title>global HTML page</title>
<script type="text/javascript">
function bigCalc(startVal, event) {
// imagine hundreds of lines of code here...
var endVal = startVal + 2;
// return to sender
event.target.page.dispatchMessage("theAnswer", endVal);
}
function respondToMessage(theMessageEvent) {
if(theMessageEvent.name === "calcThis") {
var startVal=theMessageEvent.message;
bigCalc(startVal, theMessageEvent);
}
}
safari.application.addEventListener("message",respondToMessage,false);
</script>
</head>
<body>
</body>
</html>
那么,当我试图通过document.getElementById获取元素时,为什么扩展名返回null呢?在这里,你可以找到我的分机:首先,我想感谢你的回复。对不起,我想我们彼此不了解。我想在我的扩展安装后立即开始工作。所以客户端点击install,紧接着扩展就开始工作了。就像Firefox中的无重启/启动扩展一样。打开新选项卡或重新加载页面后,我不想启动扩展。如果不可能,请告诉我如何重新加载带有$\u POST数据的页面。这是我们多年来一直在鼓吹的功能要求。看来狩猎队对此不感兴趣。现在,我们的扩展中有一个提示,上面写着,这个页面是在安装扩展之前加载的。请重新加载页面。@jxpx777-如何检测在安装扩展之前加载页面的情况?那么,当我试图通过document.getElementById获取元素时,为什么扩展返回null?在这里,你可以找到我的分机:首先,我想感谢你的回复。对不起,我想我们彼此不了解。我想在我的扩展安装后立即开始工作。所以客户端点击install,紧接着扩展就开始工作了。就像Firefox中的无重启/启动扩展一样。打开新选项卡或重新加载页面后,我不想启动扩展。如果不可能,请告诉我如何重新加载带有$\u POST数据的页面。这是我们多年来一直在鼓吹的功能要求。看来狩猎队对此不感兴趣。现在,我们的扩展中有一个提示,上面写着,这个页面是在安装扩展之前加载的。请重新加载页面。@jxpx777-如何检测在安装扩展之前加载页面的情况?