Javascript 在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拖到扩展文件夹中。点击 “扩展生成器”中的“扩展全局”

是否可以在完成Safari扩展的安装后访问DOM?
我对访问安装此扩展的页面的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-如何检测在安装扩展之前加载页面的情况?