2014-01-18 97 views
1

我想转换一个停止在清单版本2中工作的chrome扩展,我已经取出了内联javascript,并更改了chrome.extension 。连接到chrome.runtime.connect,但似乎仍然有问题chrome.runtime.connect(我从chrome.extension.connect更改),任何想法?消息传递(chrome.runtime.connect())扩展失败,chrome清单版本2

文件ContentScript.js

OnDocumentEnd(); 

var TranslitOn; 
var ToggleKeyCode; 
var LocalEnabled; 
var port; 

var ChangeListener = function (event) { OnChange(event); }; 

var KeyUpListener = function (event) { OnKeyUp(event, event.target); }; 
var KeyDownListener = function (event) { OnKeyDown(event); }; 
var KeyPressListener = function (event) { OnKeyPress(event, event.target); }; 


function OnDocumentEnd() { 
    console.log("ode"); 

    port = chrome.runtime.connect(); 

    port.onMessage.addListener(function (msg) { 
    console.log("port on msg"); 
     if (msg.Status != null) { 
    console.log("1:"+msg.Status); 
    //  TranslitOn = msg.Status; 
     } 
     if (msg.ToggleKey != null) { 
    console.log("2:"+msg.ToggleKey); 
      ToggleKeyCode = msg.ToggleKey; 
     } 
     if (msg.IsEnabled != null) { 
    console.log("3:"+msg.IsEnabled); 
      LocalEnabled = msg.IsEnabled; 
      if (LocalEnabled) { 
       Bootstrap(); 
      } 
     } 
    }); 
    port.postMessage({ GetEnabled: true }); 
    } 

文件translit.js

<script language="JavaScript" type="text/javascript" src="/import/jquery-2.0.3.min.js"></script> 
<script language="JavaScript" type="text/javascript" src="/import/sha1Hash.js"></script> 
<script language="JavaScript" type="text/javascript" src="/import/ArrayList.js"></script> 
    <script type="text/javascript"> 


    if (localStorage.getItem('t_hotkey') == null) { 
     localStorage.setItem('t_hotkey', 113); 
    } 

    var ToggleKeyCode = localStorage.getItem('t_hotkey'); 


    var TranslitOn = false; 

    var GlobalEnabled = true; 
    var Ports = new ArrayList(); 

    function FireOnEvent() { 
     try { 
      chrome.tabs.getSelected(null, function (tab) { 
       chrome.tabs.sendRequest(tab.id, { SetStatus: TranslitOn }); 
       chrome.tabs.sendRequest(tab.id, { ToggleKey: ToggleKeyCode }); 
      }); 
     } catch (e) { } 
    } 

    function Toggle() { 
     TranslitOn = !TranslitOn; 
     FireOnEvent(); 
    } 

    function UpdateToggleKey() { 
     FireOnEvent(); 
    } 

    function Save() { 
     try { 
      localStorage["ToggleKey"] = ToggleKeyCode; 
      localStorage["Enabled"] = GlobalEnabled; 
     } 
     catch (e) { } 
    } 

function Init() { 
    try { 
     chrome.runtime.onConnect.addListener(function (port) { 
      port.onMessage.addListener(function (msg) { 
      if (msg.GetStatus != null) { 
       port.postMessage({ Status: TranslitOn }); 
      } 
      else if (msg.GetToggleKey != null) { 
       port.postMessage({ ToggleKey: ToggleKeyCode }); 
      } 
      else if (msg.GetEnabled != null) { 
       port.postMessage({ IsEnabled: GlobalEnabled }); 
      } 
      }); 

      Ports.Add(port); 
     }); 

     chrome.browserAction.onClicked.addListener(function (tab) { Toggle();}); 

     chrome.runtime.onRequest.addListener(function (request, sender, sendResponse) { 
      try { 

      if (request.SetStatus != null) { 
       if (request.SetStatus != TranslitOn) { 
      Toggle(); 
       } 
      } 

      if (request.ToggleStatus != null) { 
       Toggle(); 
      } 

      if (request.SetToggleKey != null) { 
       ToggleKeyCode = request.SetToggleKey; 
       UpdateToggleKey(); 
      } 

      if (request.SetEnabled != null) { 
       GlobalEnabled = request.SetEnabled; 
      } 

      } 
      catch (e) { } 
     }); 
    } catch (e) { } 
} 

文件的manifest.json

{ 
    "background": { 
    "scripts":["translit.js"], 
    "persistent": false}, 
    "content_scripts": [ { 
     "all_frames": true, 
     "js": [ "/import/jquery-2.0.3.min.js", "/code/ContentScript.js" ], 
     "matches": [ "http://*/*", "https://*/*" ], 
     "run_at": "document_end" 
    } ], 
    "description": "xxxxxxxxxxt", 
    "icons": { 
     "128": "img/Icon128.png", 
     "32": "img/Icon32.png", 
     "48": "img/Icon48.png" 
    }, 
    "key": "MIIBIjAxxxxxxxxB", 
    "manifest_version": 2, 
    "name": "xxxxxxxxxxxxx", 
    "permissions": [ "storage", "tabs", "http://*/*", "https://*/*" ], 
    "short_name": "xxx", 
    "update_url": "http://clients2.google.com/service/update2/crx", 
    "version": "1.23" 

} 

回答

1

你还有HTML代码在translit.js的顶部。删除它,并将这些链接添加到清单中的后台脚本js数组中,并将其添加到后台脚本中,并且您应该很好:)

+0

非常感谢,这绝对是必要的,我已经制作了有用的mod,但msg属性仍然全部返回null,而在清单版本1中,它们返回值:port = chrome.runtime.connect(); port.onMessage.addListener(函数(味精){ if(msg.Status!= null){.................... and msg.ToggleKey and msg。 IsEnabled全部返回null – user2710553