Safari扩展-改变预定义的Javascript变量值



所以我想要实现的是从网站上操纵javascript变量,这样当我加载页面时,它就会改变为我预先确定的值(inmyscript.js)。

在Safari的扩展构建器中,我有以下设置:

  • 访问级别:All(以确保它暂时正确运行)
  • 启动脚本:jquery.min.js (jquery脚本)
  • 结束脚本:myscript.js (myscript)

Start Scripts,将加载jquery脚本,因为我想使用jquery进行一些DOM操作。结束脚本是包含覆盖变量的脚本,我试图在html文档中更改。

当前myscript.js看起来像:

$(document).ready(function(){
    var numberImThinkingOf = 999;
});

举一个我想做的例子:下面的页面,通过在每次提交按钮被按下时创建一个新的段落元素,打印出numberImThinkingOf的值

如果没有扩展名,它将输出
  • 值:5
  • 值:5
  • 值:5

如果按三次。

然而,我希望我的Safari扩展改变默认值的numberImThinkingOf变量一旦所有DOM元素被加载,在myscript.js中指定的,所以当我按下提交按钮,它会输出:

  • 值:999

理想情况下,我不希望操纵DOM,使其插入另一个脚本元素。我最初认为javascript附加变量到窗口对象。但我想我错了。事件,如果我有一个脚本,如

$(document).ready(function(){
    alert(numberImThinkingOf)
});

返回undefined。如有任何帮助,我将不胜感激。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <script>
    var numberImThinkingOf = 5;
    function whatNumber(){
        var newElement = document.createElement("p");
        newElement.textContent = "Value: "+numberImThinkingOf;
        document.body.insertBefore(newElement, document.body.firstChild);
    }
    </script>
</head>
<body>
<input type="submit" value="Continue &rarr;" onclick="whatNumber()" />
</body>
</html>

我相信您的脚本和页面得到不同的window对象,以避免意外污染。以下是Safari扩展开发指南所说的:

注入脚本有一个隐含的命名空间-你不必担心你的变量或函数名称与网站作者的名称冲突,网站作者也不能在你的扩展中调用函数。换句话说,注入的脚本和包含在网页中的脚本在孤立的世界中运行,不能访问彼此的函数或数据。

听起来您需要以某种方式将这个变量附加到DOM上,例如作为标记的属性。

内容脚本是沙盒,如果你想访问父页面变量,你必须注入<script>标记与你的代码。你可以在这里找到一些例子。

最新更新