мое всплывающее окно расширения Chrome открывается через несколько секунд, оно медленное по сравнению с другими расширениями

Когда мы нажимаем на extension button, указанный рядом с адресной строкой (где появляется URL-адрес), появляется popup.html соответствующего расширения. (конечно, по словам manifest.json)

Когда я нажимаю на lastPass, всплывающее окно появляется мгновенно, но когда я нажимаю на свое пользовательское расширение (не содержит ничего, кроме popup.html), значок мыши меняется на загрузку на 1-2 секунды, а затем открывается всплывающее окно.

Немного покопался, почему мое всплывающее окно такое медленное, в группах google было что-то вроде

window.load=setTimeout(activate,0);

Не удалось найти соответствующую документацию или рабочий образец.

Пожалуйста, помогите разобраться, почему мое всплывающее окно расширения такое медленное, хотя в коде нет ничего, кроме всплывающего окна (новичок в разработке chrome-расширений).

Обновить

manifest.json

{
  "manifest_version": 2,

  "name": "Sample Name",
  "description": "Sample Descriptoin",
  "version": "1.0",

  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  },
  "permissions": [
    "<all_urls>"
  ]
}

всплывающее окно.html

<!doctype html>
<html>
    <head>
    </head>
    <body>
        <div>
            <label>Enter HR Password</label>
            <input type='password' id='passwd'/>
            <button id='evaluateResults'>Evaluate</button>
            <ul id='results' style='width:100px;'>

            </ul>
        </div>
        <script src='popup.js'></script>
    </body>
</html>

popup.js

var totalCorrect=0, totalWrong=0;

document.getElementById('evaluateResults').addEventListener('click',function(){
    var passwd=document.getElementById('passwd').value;
    if(passwd==='123'){     
        var strCode="var scriptOptions = {role:'blank'};";
        chrome.tabs.executeScript(null, {code: strCode,allFrames:true}, function(){
            chrome.tabs.executeScript(null, {file: "content_script_evaluate.js",allFrames:true});       
        });
    }else{
        alert("Incorrect Password");
    }
});

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    console.log(request);
    var ul=document.getElementById('results');
    var li=document.createElement('li');
    li.innerHTML=request.testName+" - "+(request.testResult?"Correct":"Wrong");
    ul.appendChild(li);
});

person coding_idiot    schedule 09.10.2014    source источник
comment
Покажите нам код; невозможно сказать, почему долго загружается, если мы не видим, что вы пытаетесь загрузить.   -  person Xan    schedule 09.10.2014
comment
@Xan добавил код.   -  person coding_idiot    schedule 09.10.2014
comment
Я не могу воспроизвести это с частями, которые вы показываете.   -  person Xan    schedule 09.10.2014
comment
@Xan, значит, значок мыши не меняется на загрузчик на секунду, а затем появляется только всплывающее окно?   -  person coding_idiot    schedule 10.10.2014
comment
у меня тоже отлично работает... нет времени ожидания   -  person Marco Bonelli    schedule 10.10.2014


Ответы (1)


Что сработало, так это добавить пустую фоновую страницу. Это не объясняется в документации Google (по крайней мере, я ее не нашел), так что это скорее случайность, но, похоже, работает.

Идея состоит в том, что плагин загружается один раз, когда вы заходите на страницу (то есть еще до того, как вы нажмете), а не перезагружается снова и снова при каждом клике.

В манифесте добавьте что-то вроде:

{
  //...
  "background": {
    "page": "bg.html"
  }
  //...
}

И bg.html может быть просто пустым файлом HTML:

<html>

</html>

Опять же - никогда не нашел явной ссылки или ресурса, объясняющего, почему это нужно делать именно так, и я не уверен, что это лучшая практика, но у меня это сработало.

person Mario Mucalo    schedule 11.05.2015
comment
Это не работает. Когда мы пытаемся добавить страницу в фоновом режиме, мы не можем распаковать (загрузить) расширение в Google Chrome. - person Balasubramani M; 16.11.2018
comment
@BalasubramaniM - какую ошибку вы получаете? Вы трижды проверяли, соответствует ли ваш манифест документации Google? Пожалуйста, предоставьте больше информации. - person Mario Mucalo; 19.11.2018
comment
Работает ! Спасибо ! - person Mayur Buragohain; 28.04.2020