Многие сайты используют AJAX для динамического добавления / отображения / изменения контента. Иногда он используется вместо навигации по сайту, поэтому текущий URL-адрес изменяется программно, а сценарии содержимого в этом случае автоматически не выполняются браузером, так как страница не извлекается с удаленного сервера целиком.
pjax:end
в document
, используемое многими сайтами на основе pjax, например. GitHub, см. Как запустить jQuery до и после загрузки pjax? message
на window
, используемом, например, Поиск Google в браузере Chrome, см. Расширение Chrome обнаруживает обновление поиска Google spfdone
в document
, используемое Youtube, см. . Как определить навигацию по страницам на Youtube и изменять HTML до отображения страницы? document.head.appendChild(document.createElement('script')).text = '(' +
function() {
// injected DOM script is not a content script anymore,
// it can modify objects and functions of the page
var _pushState = history.pushState;
history.pushState = function(state, title, url) {
_pushState.call(this, state, title, url);
window.dispatchEvent(new CustomEvent('state-changed', {detail: state}));
};
// repeat the above for replaceState too
} + ')(); this.remove();'; // remove the DOM script element
// And here content script listens to our DOM script custom events
window.addEventListener('state-changed', function(e) {
console.log('History state changed', e.detail, location.hash);
doSomething();
});
window.addEventListener('hashchange', function(e) {
console.log('URL hash changed', e);
doSomething();
});
window.addEventListener('popstate', function(e) {
console.log('State changed', e);
doSomething();
});
Для работы с навигацией существует расширенный API: webNavigation , webRequest , но мы будем использовать простой chrome.tabs.onUpdated прослушиватель событий, который посылает сообщение к скрипту содержимого:
"tabs"
разрешено . var rxLookfor = /^https?:\/\/(www\.)?google\.(com|\w\w(\.\w\w)?)\/.*?[?#&]q=/;
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
if (rxLookfor.test(changeInfo.url)) {
chrome.tabs.sendMessage(tabId, 'url-update');
}
});
chrome.runtime.onMessage.addListener(function(msg, sender, sendResponse) {
if (msg === 'url-update') {
doSomething();
}
});
Удостоверьтесь, что опция Enable String Pooling при Генерации кода C/C++ включена.
Это обычно устраняет эту проблему, которая является одним из тех "ха?" Ограничения MS как 64k ограничивают на электронных таблицах Excel. Только это влияние количество символов, которые могут появиться в блоке.
Необходимо ли повернуть сброс / на для всего проекта? Вы могли вместо этого включить его только для маленького избранного количества файлов и быть очень осторожными, как Вы включаете управляемый код? Я работаю с большим C++ / приложение MFC, и мы нашли очень трудным использовать управляемый С++. Я люблю C# и.NET, но управляемый С++ был только головной болью. Большинство наших проблем произошло с.NET 1.0/1.1..., возможно, вещи лучше теперь.
Я сделал это с очень большим смешанным режимом (C#/C ++) приложения три раза (3x) и после того как помещение вышеупомянутого фиксирует в место, никогда не видели ошибки снова.
И не, если что-нибудь это должно привести к немного более быстрому выполнению во время выполнения (ничто Вы могли бы когда-либо иметь размеры, как бы то ни было.)
Но я соглашаюсь, что это - своего рода временная мера. Внутренний предел на символы не использовал, чтобы быть проблемой, или если это было, тот предел был намного выше. Затем MS изменил часть кода загрузчика. Я добрался на MSDN и разглагольствовал об этом и был сказан недвусмысленно, "только идиот поместит это много символов в единственный блок".
(Который является одной из причин, я больше не участвую на MSDN.)
Ну, окрасьте меня глупым, но я не думаю, что мне придется изменить физическую структуру моего приложения, выломав вещи в спутниковый DLLs, просто для обхождения того, что загрузчик решил, что 10 001 символ равняется 1 слишком многие.
И поскольку Вы указали, мы часто не управляем, как блоки/спутник, DLLs являются структурой и видом зависимостей, которые они содержат.
Но я не думаю, что Вы будете видеть эту ошибку снова в любом случае.