Я не совсем уверен, что ваша проблема связана с изолированной средой, в которой KBX запускает ваш код, но я думаю, что это возможно. Вот пост, который я написал о работе с изолированной средой KBX http://geek.michaelgrace.org/2011/03/kynetxs-new-sandboxed-browser-extensions/
Из блога
Недавно я выпустил свое приложение Old School Retweet Kynetx в магазине приложений Kynetx для недавно выпущенных расширений браузера. Я очень люблю новые расширения и все, что они делают для пользователей и разработчиков. Что-то, что я забыл, когда выпустил приложение в магазине приложений, это то, что новое расширение находится в «песочнице».
Поскольку расширения находятся в «песочнице», все скрипты из расширений работают немного по-другому, чем в предыдущих расширениях Kynetx. Не вдаваясь в технические детали, предыдущие расширения просто внедрили JavaScript на страницу, а новые расширения запускают JavaScript в песочнице, которая имеет доступ к DOM, но не может получить доступ ни к чему другому на странице. Из-за этого изменения мое приложение ретвита сломалось, так как я использовал jQuery, загруженный Twitter.com, чтобы открыть новый ящик для твитов (я делаю это потому, что Twitter.com использовал эту библиотеку, чтобы связать событие щелчка и вызвать это событие, оно должно быть из той же библиотеки, которая его связывала). К счастью, с помощью друга я смог обойти среду Firefox и Chrome в песочнице.
Как я это сделал ...
Если приложение запущено не внутри песочницы, я могу просто получить доступ к jQuery, который загружает Twitter.com, чтобы открыть новый ящик для твитов
$("#new-tweet").trigger("click");
Из песочницы Firefox я могу получить доступ к странице вне песочницы
window['$']("#new-tweet").trigger("click");
Если я нахожусь в изолированной программной среде Chrome, я могу создать элемент скрипта с JavaScript, который я хочу выполнить. Грубый, но это работает. :)
var trigger_click_script = document.createElement("script");
var fallback = "window['$']('#new-tweet').trigger('click');";
trigger_click_script.innerHTML = fallback;
document.getElementsByTagName("head")[0].appendChild(trigger_click_script);
Вот код JavaScript, с которым я закончил, который исполняется, когда пользователь нажимает кнопку ретвита.
// get stuff to retweet
var tweet = $K(this).parents(".tweet-content").find(".tweet-text").text();
var name = $K(this).parents(".tweet-content").find(".tweet-screen-name").text();
// build tweet
var retweet = "RT @"+name+" "+tweet;
// open new tweet box
$("#new-tweet").trigger("click");
// hack for FF sandbox
if ($("#tweet-dialog:visible").length === 0) {
window['$']("#new-tweet").trigger("click");
}
// put tweet in new tweet box
$K(".draggable textarea.twitter-anywhere-tweet-box-editor").val(retweet).focus();
$K("#tweet_dialog a.tweet-button.button.disabled").removeClass("disabled");
// hack for chrome sandbox
if ($("#tweet-dialog:visible").length === 0) {
var fallback = "window['$']('#new-tweet').trigger('click'); ";
fallback += "window['$']('.draggable textarea.twitter-anywhere-tweet-box-editor').val('"+retweet+"').focus(); ";
fallback += "window['$']('#tweet_dialog a.tweet-button.button.disabled').removeClass('disabled'); ";
var trigger_click_script = document.createElement("script");
trigger_click_script.innerHTML = fallback;
document.getElementsByTagName("head")[0].appendChild(trigger_click_script);
}