2

所以我想要实现的是从网站操作JavaScript变量,以便当我加载页面时,它会更改为预先确定的值(inmyscript.js)。Safari扩展 - 更改预定义的Javascript变量值

在Safari的扩展名建设者,我有以下设置:

  • 访问级别:所有(要确保它是暂时正常运行)
  • 启动脚本:jquery.min.js(中jQuery脚本)
  • 结束Scritps:myscript.js(myscript)的

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

目前myscript.js样子:

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

为了什么,我试图做一个例子:下面的页面,打印出numberImThinkingOf的值,每次创建一个新的段落元素提交按钮。

所以用了扩展它会打印出

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

如果按压3次。

不过,我想我的Safari浏览器插件来改变numberImThinkingOf变量一旦所有的DOM元素加载的默认值,以在指定myscript.js这样,当我按下提交按钮它会输出:

  • Value: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> 
+0

你为什么加载jQuery作为启动脚本?没有理由这么做,启动脚本实际上仅用于需要中断资源加载的脚本。只需加载它作为你的第一个结束脚本。 –

回答

3

我相信你的脚本和页面得到不同window对象,以避免意外污染下面介绍一下Safari Extensions Development Guide说:。

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

听起来像你需要以某种方式将此变量附加到DOM,可能作为标记的属性。

2

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