所以我想要实现的是从网站上操纵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 →" onclick="whatNumber()" />
</body>
</html>
我相信您的脚本和页面得到不同的window
对象,以避免意外污染。以下是Safari扩展开发指南所说的:
注入脚本有一个隐含的命名空间-你不必担心你的变量或函数名称与网站作者的名称冲突,网站作者也不能在你的扩展中调用函数。换句话说,注入的脚本和包含在网页中的脚本在孤立的世界中运行,不能访问彼此的函数或数据。
听起来您需要以某种方式将这个变量附加到DOM上,例如作为标记的属性。
内容脚本是沙盒,如果你想访问父页面变量,你必须注入<script>
标记与你的代码。你可以在这里找到一些例子。