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