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

时间:2011-09-07 22:11:41

标签: javascript google-chrome-extension scope safari-extension

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

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

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

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

目前myscript.js看起来像:

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

有关我要做的事情的示例:下面的页面,通过在每次按下提交按钮时创建一个新的段落元素,打印出numberImThinkingOf的值。

因此,如果没有扩展名,它将打印出来

  • 价值:5
  • 价值:5
  • 价值:5

如果按了三次。

但是我希望我的Safari扩展程序在加载所有DOM元素后将numberImThinkingOf变量的默认值更改为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>

2 个答案:

答案 0 :(得分:3)

我相信您的脚本和页面会有不同的window个对象,以避免意外污染。以下是Safari Extensions Development Guide所说的内容:

  

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

听起来你需要以某种方式将这个变量附加到DOM,也许作为标签的属性。

答案 1 :(得分:2)

内容脚本是沙箱,如果要访问父页面变量,则必须在代码中注入<script>标记。您可以找到一些示例here