2017-04-14 2 views
0

Beim Laden der Younow-Website erscheint die Meldung "Start" zweimal. -Wie kann ich das beheben?Younow onLoad (mit greasemonkey)

// ==UserScript== 
// @name  test 
// @include https://www.younow.com/* 
// @version  1 
// @grant  none 
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js 
// ==/UserScript== 
$(document).ready(function() { 
alert("Start"); 
}); 

Antwort

1

Die alert wirkt auf diese Weise auf dieser Website, vielleicht wegen eines reload nach dem Anruf, aber mit einem prepend für mich ist es ok.

$(document).ready(function() { 
    $('body').prepend("toto"); // your code here 
}); 

Auch brauchen Sie nicht die Ready-Funktion zu verwenden, Greasemonkey Skript zum richtigen Zeitpunkt starten.

Aber das Problem ist:

  1. Ich nehme an, Sie möchten, dass Ihre Sachen tun, wenn alle Ajax-Elemente geladen werden. Am besten ist es, das Dom zu beobachten.
  2. Da die Website die aktuelle Seite mit AJAX-Anforderungen beim Klicken ändern und das hashchange-Ereignis nicht funktioniert, verwende ich einen Trick, um jede Seitenänderung anzuhören.

Mit diesem Skript können Sie eine alert Funktion:

// ==UserScript== 
// @name  test 
// @include https://www.younow.com/* 
// @version  1 
// @grant  none 
// @require https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js 
// ==/UserScript== 

var observer = null; 
initObserver(); 

function initObserver() 
{ 
    observer = new MutationObserver(onMutation); 
    observer.observe(document, 
    { 
    childList: true, // report added/removed nodes 
    subtree: true, // observe any descendant elements 
    }); 
} 

$(window).on('hashchange', function(e) 
{ 
    initObserver(); 
}); 

intervalMutation = setInterval(onMutation.bind(null, null), 1000); 

function locationObserver() 
{ 
    var oldLocation = location.href; 
    setInterval(function() { 
     if(location.href != oldLocation) { 
      onMutation(null); 
      oldLocation = location.href 
     } 
    }, 1000); // check every second 
} 
locationObserver(); 

function onMutation(mutations) 
{ 
    // Check if this class exits: 
    if($('.trending-now').length || 
    $('.ynicon ynicon-chat').length || 
    $('.trending_title').length || 
    $('.trending-tags-list').length) 
    { 
    // Disconnect the observer: 
    observer.disconnect(); 
    // Clear the interval : 
    clearInterval(intervalMutation); 
    // Call your code: 
    pageReady(); 
    } 
} 

function pageReady() 
{ 
    // your code here: 
    alert('start'); 
}