Многие сайты используют 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();
}
});
Можно использовать FileMon Sysinternal. Это - превосходный монитор, который может сказать Вам точно, которыми делаются связанные с файлом системные вызовы и каковы параметры.
Я думаю, что этот подход намного легче, чем сцепление вызовов API и намного менее навязчив.
Вот ссылка, которая могла бы быть полезной:
Файл партизанского стиля, контролирующий с C# и C++
Возможно создать файл без касающегося CreateFile API, но я могу спросить, какой метод Внедрения DLL Вы используете? При использовании чего-то как Windows Hooks DLL не будет установлен, до когда-то после того, как целевое приложение инициализирует, и Вы пропустите ранние звонки к CreateFile. Принимая во внимание, что при использовании чего-то как DetourCreateProcessWithDll, рычаг CreateFile может быть установлен до любого выполнения кода запуска приложения.
По моему опыту, 99,9% создал/открыл результат файлов в вызове к CreateFile, включая файлы, открытые через C, и C++ освобождает, третье лицо освобождает и т.д. Возможно, существуют некоторые недокументированные функции DDK, которые не направляют через CreateFile, но для типичного файла журнала, я сомневаюсь относительно этого.