1

這是關於this question的後續問題。簡短的版本是:我試圖插入一個愚蠢的鏈接(關閉投票作爲dupe在堆棧溢出)到使用javascript(Chrome擴展)的密切投票彈出文本框中。前面的答案讓我更進一步,似乎是解決方案。然而,在這個問題上的答案在控制檯中工作,但由於某種原因在我的Chrome擴展中不起作用。Javascript正在控制檯中工作,但不在內容中

問題是:當打開投票關閉在堆棧溢出這裏關閉彈出一個問題,然後單擊重複原因。我可以在控制檯中運行以下代碼:

var $dupeQuestion = $('#duplicate-question'); 
$dupeQuestion.val('https://stackoverflow.com/questions/8028957/headers-already-sent-by-php'); 

var e = $.Event('keydown', { keyCode: 64 }); 
$dupeQuestion.trigger(e); 

而且正如已經提到的那樣工作。該鏈接被插入到文本框中,Stack Overflow JS開始檢索問題。然而,當我嘗試在我的延長運行完全相同的代碼只還挺工作:

$(document).on('click', '.cvhelper-dupelist li', function() { 
    var $dupeQuestion = $('#duplicate-question'); 
    $dupeQuestion.val('https://stackoverflow.com/questions/8028957/headers-already-sent-by-php'); 

    var e = $.Event('keydown', { keyCode: 64 }); 
    $dupeQuestion.trigger(e); 
}); 

有點兒工作方式:鏈接插入文本框,但堆棧溢出腳本來檢索的問題不踢所以我完全無能爲力,可能是錯的。當使用控制檯vs contentscript時,在某處可能有區別?還要別的嗎?

我創建了a download,它帶有一個非常簡化的github擴展版本。

+0

也許你正在覆蓋stackoverflows的JavaScript,嘗試使用setTimeout進行測試,因爲控制檯腳本在絕緣區域執行,我想。 – Tearsdontfalls

+1

重要的是'console'-run腳本在問題中是否都是一行?它使得它難以閱讀和比較。另外,我不知道你可以在'document'中使用'.on()'。不是說你不能,只是不知道你能。 –

+0

是的,你也可以嘗試用$(document).ready(function(){$('。cvhelpeler-dupelist li')替換它。click(function(){});} – Tearsdontfalls

回答

0

其中一個可能的原因是您的內容腳本是在其他腳本加載之前執行的,並且它弄亂了其他事情。如果是這個原因,那就試試吧:

"content_scripts": [ 
    { 
     "run_at": "document_end", 
     "js": ["jquery.js", "myscript.js"] 
    } 
] 

它可能有效,但我真的不知道。 :/試試看看它是否修復。

+0

不能:(不工作 – PeeHaa

+0

唉...也許問題是在某些地方隱藏在你的代碼中 –

+0

我已經更新了我的問題,並附有簡化擴展的鏈接,我還在[此評論]中添加了所有相關鏈接(http://stackoverflow.com/questions/10965248/javascript-is-在控制檯中工作但不在in contentscript#comment14317171_10965248)。 – PeeHaa

0

好吧,這是一個會想到的唯一的事情:

$(document).on('click', '.cvhelper-dupelist li', function() { 
    var $dupeQuestion = $('#duplicate-question'); 
    $dupeQuestion.val('http://stackoverflow.com/questions/8028957/headers-already-sent-by-php'); 

    setTimeout(function() { 
     var e = $.Event('keydown', { keyCode: 64 }); 
     $dupeQuestion.trigger(e); 
    }, 1); 
}); 

這將基本上讓click處理程序完成試圖觸發的keyDown之前。

相關問題