2012-08-30 48 views
2

我想提出,當用戶點擊一個附加的小部件出現這種情況加載的網頁上:如何從mozilla插件使用頁面的jQuery方法?

var e = jQuery.Event("keydown", { keyCode: 405 }); 
$("input").trigger(e); 

jQuery是已經加載到目標頁面。我已經試過這樣:

var widgets = require("widget"); 
var tabs = require("tabs"); 
var pageMod = require("page-mod"); 

var widget = widgets.Widget({ 
    id: "button-test", 
    label: "button-test", 
    contentURL: "http://www.mozilla.org/favicon.ico", 
    onClick: function() { 
     tabs.activeTab.attach({ 
      contentScript: 
       'var e = window.jQuery.Event("keydown", { keyCode: 405 }); $("input").trigger(e);' 
     }); 
    } 
}); 

我在控制檯中出現以下錯誤:

Timestamp: 30/08/2012 14:06:36 
Error: An exception occurred. 
Traceback (most recent call last): 
    File "javascript:var e = window.jQuery.Event("keydown", { keyCode: 405 }); $("input").trigger(e);", line 1, in 
TypeError: window.jQuery is undefined 

我需要的postMessage或port.emit()?我;也嘗試過只是jQuery.event(沒有窗口)

+0

什麼樣的錯誤呢你的第一個代碼塊的JavaScript拋出? – MaxPRafferty

+0

我粘貼了我所得到的唯一錯誤。我可以在Chrome的控制檯中運行第一個代碼塊 – codecowboy

+0

不知道有關mozilla插件加載空間的任何信息,您是否可以訪問window.XXX中的其他全局變量?如果你不知道,扔XXX =「發現」;進入你的頁面代碼並提醒(window.XXX);插入你的插件 - 如果運行,那麼你可能只需要等待jQuery加載。 – MaxPRafferty

回答

1

jQuery已經加載到目標頁面。

是的,網頁可以訪問它。但是,出於安全原因,您的內容腳本doesn't have direct access to the webpage。你可能訪問jQuery(和頁面定義的其他JavaScript變量)爲unsafeWindow.jQuery,但這有嚴重的安全隱患 - 不推薦使用。你的情況可能會更好,以你自己的jQuery副本添加到您的擴展,並加載它與您的內容腳本 - 那麼你可以肯定的是jQuery是那裏,做你期望它做的正是:

var {data} = require("self"); 
tabs.activeTab.attach({ 
    contentScriptFile: [data.url("jquery.js"), data.url("contentScript.js")] 
}); 
+0

我現在已經做到了。如何使用我自己的jQuery副本來定位目標頁面上發生的事件? – codecowboy

+0

@codecowboy:只要它們是常規的DOM事件就不會有問題......然後,jQuery可能不會創建常規的DOM事件,這意味着您必須使用[document.createEvent()](https:// developer.mozilla.org/en-US/docs/DOM/document.createEvent)。 –

+0

unsafeWindow.jQuery爲空。在添加我自己的jquery副本的過程中,似乎並沒有多少意義,因爲我想要做的事情是在頁面本身上觸發一個事件(而不是偵聽一個事件)。聽起來就像我將必須在普通的舊JS中那樣做。 – codecowboy

0

這是對我工作:

var widgets = require("widget"); 
var tabs = require("tabs"); 
var data = require("self").data; 

var widget = widgets.Widget({ 
    id: "div-show", 
    label: "Show divs", 
    contentURL: "http://www.mozilla.org/favicon.ico", 
    onClick: function() { 
     tabs.activeTab.attach({ 
      contentScriptFile: 
       [data.url("jquery-1.8.0.min.js")], 
      contentScript: [ 
       "$(window).keydown(function(e){ \ 
       console.log(e.keyCode);}); $(window).trigger(jQuery.Event('keydown', { keyCode: 405 })) "] 

     }); 
    } 
}); 

點擊Widget圖標生成然後把它記錄了keydown事件

+0

其實沒有它沒有。它確實創造了事件。但不會定位加載的頁面。 – codecowboy

相關問題