2013-10-20 88 views
1

openned窗口在開發Chrome擴展我設法在我的JavaScript文件Chrome擴展的發展緊密的javascript

myWindow=window.open("www.google.com"); 

使用此代碼,打開一個新的標籤我可以打開它後立即關閉它:

myWindow.close(); 

我嘗試了幾種方法爲JavaScript等待幾秒鐘才結束,但如果我這樣做,它不會關閉。也許是因爲它失去了窗戶的ID?我不知道。我剛開始學習Chrome擴展開發。

[編輯]我提交了所有的代碼,我必須幫助你們。我提醒你我正在嘗試開發一個Chrome擴展,當我點擊我的擴展創建的工具欄上的按鈕時,就會發生這種情況。 (從這裏取代碼:http://developer.chrome.com/extensions/getstarted.html

HTML文件

<!doctype html> 
<html> 
<head> 
<title>Getting Started Extension's Popup</title> 
<style> 
    body { 
    min-width: 357px; 
    overflow-x: hidden; 
    } 

    img { 
    margin: 5px; 
    border: 2px solid black; 
    vertical-align: middle; 
    width: 75px; 
    height: 75px; 
    } 
    </style> 
<script src="popup.js"></script> 
</head> 
<body> 
</body> 
</html> 

清單

{ 
"manifest_version": 2, 

"name": "myExtension", 
"description": "This extension is under development", 
"version": "1.0", 

"browser_action": { 
"default_icon": "icon.png", 
"default_popup": "popup.html" 
}, 
"permissions": ["www.google.com"] 
} 
+0

你嘗試過'setInterval'嗎? –

+0

@Jacedc是的,我已經嘗試過。它似乎並不關心接下來會發生什麼,因爲它會打開一個新選項卡。我對嗎? –

+0

它可能是你的代碼中的其他東西,因爲這可以工作:http://jsfiddle.net/bCnH3/ – Markasoftware

回答

0

這不能被推遲了,因爲瀏覽器的安全框架。要打開/關閉一個窗口,用戶發起的事件必須事先發生。

+0

我不確定。我的應用程序關閉了一個沒有用戶事件的窗口。這不是延伸,但仍然。 – Markasoftware

+0

如果我設置close()間隔小於200ms,我可以關閉窗口。這可能是因爲它沒有足夠的時間將第一個字節發送到網絡。 –

+0

@ user2773389這可能是因爲它仍處於「用戶啓動的事件」閾值。網絡請求幾乎立即被觸發。 – nietonfir

1

您似乎是從擴展程序的彈出窗口中執行此操作。彈出窗口在關注焦點時會關閉,所以我的猜測是,當新窗口獲得焦點時,它的執行環境將被破壞。所以你設置的任何延遲事件都不能執行。

看來你的彈出窗口是一個空窗口,它唯一能做的就是打開窗口。在這種情況下,你不需要定義一個彈出窗口。您可以使用chrome.browserAction.onClicked event從背景頁面執行此操作。

如果您確實需要從彈出窗口中開始操作,則可以在後臺頁面中定義一個函數,然後使用chrome.runtime.getBackgroundPage(function(w){w.yourFunction();})調用該函數。

另外,請記住,在擴展中,您有chrome.windowschrome.tabs API可用。

+0

使用['chrome.runtime.getBackgroundPage'](https://developer.chrome.com/extensions/runtime。html#method-getBackgroundPage)[事件頁面](https://developer.chrome.com/extensions/event_pages.html)。 –

+0

@RobW更新,謝謝! – rsanchez

+0

['chrome.runtime.getBackgroundPage'](https://developer.chrome.com/extensions/runtime.html#method-getBackgroundPage)是異步的,因爲它可能未加載事件頁面,需要先加載,所以它實際上是'chrome.runtime.getBackgroundPage(function(bgWindow){bgWindow.yourFunction();});' –