2013-01-09 48 views

回答

4

你可以通過注入JS腳本來實現這一點。注入的腳本可以訪問它們注入的網頁的DOM。注入的腳本具有與從網頁主機執行的腳本相同的訪問權限。

你可以找到更多的信息here

調用從注入腳本

  1. 列表項
  2. 一個函數創建使用擴展生成器的擴展文件夾。將
  3. 列表複製到文本編輯器中,並保存爲Injected.js和Global.html。
  4. 將Injected.js和Global.html拖到您的擴展文件夾中。點擊
  5. 在擴展生成器中擴展全局頁面,然後選擇Global.html。
  6. 單擊結束腳本中的新腳本並選擇Injected.js。將
  7. 分機網站訪問級別設置爲全部。點擊安裝。

代碼 Injected.js

var initialVal=1; 
var calculatedVal=0 ; 

function doBigCalc(theData) { 
    safari.self.tab.dispatchMessage("calcThis",theData); 
} 

function getAnswer(theMessageEvent) { 
    if (theMessageEvent.name === "theAnswer") { 
     calculatedVal=theMessageEvent.message; 
     console.log(calculatedVal); 
    } 
} 
safari.self.addEventListener("message", getAnswer, false); 

doBigCalc(initialVal); 

代碼 Global.html

<!DOCTYPE HTML> 
<html> 
<head> 
<title>global HTML page</title> 
<script type="text/javascript"> 

function bigCalc(startVal, event) { 
    // imagine hundreds of lines of code here... 
    var endVal = startVal + 2; 
    // return to sender 
    event.target.page.dispatchMessage("theAnswer", endVal); 
} 

function respondToMessage(theMessageEvent) { 
    if(theMessageEvent.name === "calcThis") { 
     var startVal=theMessageEvent.message; 
     bigCalc(startVal, theMessageEvent); 
    } 
} 

    safari.application.addEventListener("message",respondToMessage,false); 
</script> 
</head> 
<body> 
</body> 
</html> 
+0

爲什麼我的分機返回我空,當我嘗試的document.getElementById獲取元素? 在這裏你可以找到我的擴展:http://proto.hiryuu.eu/safari.html – 0xhiryuu

+0

更新的答案與指示和示例代碼。 –

+0

首先我要感謝Gurpreet Singh的回覆。 對不起,但我認爲我們不相互瞭解。 我想在安裝後開始工作我的擴展RIGHT。 因此,客戶點擊「安裝」,然後擴展開始工作。 就像Firefox中的重啓/ bootstarpped擴展一樣。 我不想在打開新選項卡或重新加載頁面後啓動我的擴展程序。 如果不能告訴我如何用$ _POST數據重新加載頁面。 – 0xhiryuu