Причина в том, что когда вы откладываете назначение на щелчок документа, это означает, что запрос успевает завершиться, и задаете значение высоты.
В вашем первом примере высота не имеет значения ввремя назначения.Причина в том, что тело функции, переданное в sendRequest
, выполняется не сразу, а сохраняется до завершения запроса.После этого функция вызывается.Но до этого javascript продолжит выполнение вашего оператора $("#id")...
.Чтобы удостовериться, что ему не присвоено значение до его появления, измените его на следующее:
$(document).ready(function() {
chrome.extension.sendRequest({get: "height"}, function(response) {
height = response.value;
$("#id").css("height", height+"px");
});
});
Теперь, если функция обратного вызова, переданная в sendRequest
, выполняется в контексте, где этот код не можетбыть выполненным, как и в случае с расширениями браузера, вам, возможно, придется вместо этого передать ссылку на объект:
$(document).ready(function() {
var myObj = $("#id");
chrome.extension.sendRequest({get: "height"}, function(response) {
height = response.value;
myObj.css("height", height+"px");
});
});
Но я бы пошел с первой версией, если это работает.
Когда вы применили это, выясните, нужно ли по-прежнему сохранять глобальную переменную height
...