2012-05-04 5 views
5

Greasemonkey 스크립트를 사용하여 텍스트를 a Rally 페이지의 링크로 변환하려고합니다. 스크립트는 페이지를 새로 고침 할 때 으로 작동합니다. Greasemonkey 메뉴에 체크 표시와 함께 하단에 스크립트가 표시 되더라도 스크립트가 실행되지 않습니다 (링크, 브라우저 앞으로/뒤로).Greasemonkey 스크립트는 페이지가 다시로드 될 때만 실행됩니다.

https://rally1.rallydev.com/#/4745909548/detail/userstory/6138899084/changesets 

내 일치 규칙 : 여기

는 예를 들어 URL입니다 해시가 문제를 일으키는 지

/^https://.*\.rallydev\.com/.*/changesets$/ 

는 나도 몰라,하지만 난 다시로드 할 때 모든 것이 괜찮습니다.

여기에서 어디로 가야할지 잘 모르겠습니다. 어떤 도움을 주셔서 감사합니다.

+1

리로드에서 작동하면 일치가 중요한지 의심 스럽습니다 ... –

+0

누군가가 물어볼 것이라고 생각했기 때문에 동의합니다. :) – neilw

답변

7

타겟 페이지가 유료화 벽 뒤에 있고 "무료 평가판"메커니즘이 청크를 불어 넣기 때문에 어떤 일이 벌어지고 있는지 확인할 수 없습니다.

다음은 현재의 행동을 유발할 수있는 요인은 다음과 같습니다

  1. 초기 요청 (HTTP) 불안하지만 보안 페이지 (HTTPS)로 리디렉션합니다.
  2. 첫 페이지로드는 실제 페이지로 다른 종류의 리디렉션을 수행합니다.
  3. 대상 콘텐츠가 즉시로드되지 않는 에 있습니다.
  4. 대상 내용은 AJAXed-in입니다.
  5. 우리가 알아낼 실제 페이지를 볼 필요가있는 이국적인 것.
  6. 초기 URL은 실제로는 changesets으로 끝나지 않습니다.

또한, 정규 표현식의 중간/의 탈출의 습관을. 항상 필요한 것은 아니지만, 그렇지 않으면 결국 검열을 받게 될 것입니다. 스크립트는 다음을 사용해야합니다.

// @include /^https:\/\/.*\.rallydev\.com\/.*\/changesets$/ 

시작하려면 아래를 참조하십시오. 솔루션에


단계 :

  1. 는 HTTP 및 공간을 후행 또는 URL에 슬래쉬의 가능성을 설명하기 위해 @include을 변경합니다. 사용 :

    // @include /^https?:\/\/.*\.rallydev\.com\/.*\/changesets(?:\s|\/)*$/ 
    
  2. Firebug으로 페이지를 검사하십시오. 내용이 AJAXed-in입니까? 에 있나요? 그렇다면 iframe URL은 무엇입니까?
  3. 또한 AJAX 및/또는 리디렉션을 감지하려면 Firebug's Net panel 및/또는 Wireshark을 사용하십시오.
  4. 가능한 경우 문제가있는 페이지가 표시 될 수 있도록 로그인 자격 증명을 제공해주십시오.
  5. 문제가되는 페이지 (Firefox를 통해 저장)와 그 HTML 및 JS에 대한 링크를 Pastebin.com으로 스냅 샷합니다.
  6. 는 같은 코드를 사용하는 것이 좋습니다 :

    if (window.top != window.self) { 
        //--- Don't run on/in frames or iframes. 
        return; 
    } 
    

    적용으로, 스크립트는 iframe을 (또는하지 않음)에서 실행되도록하려면.


문제가 AJAX 지연 (또는 새로운 콘텐츠의 로딩)에 의한 경우를 사용하여 the waitForKeyElements() utility"Fire Greasemonkey script on AJAX request"에 도시 된 바와 같이, 그 주위를 얻는다.

+1

이것은 기념비적으로 도움이되었습니다. 대단히 감사합니다. AJAX 문제 였지만 처음에는 페이지에 링크가 구성된 방식으로 바보짓을했습니다. waitForKeyElements()를 사용하여 전체 도메인에 규칙을 적용 해봤는데 제대로 작동하는 것 같습니다. 그것은 조금 비만 (jQuery를로드 할 필요가 없었 으면 좋겠다)이지만 작동하고 신뢰성있는 것으로 보인다. 번들에 감사드립니다. – neilw

+1

반갑습니다. 한 번 jQuery를 필요로하지 않는'waitForKeyElements'를 만들려고 생각했지만, 가장 간단한 스크립트는 jQuery를 사용합니다. 특히 GM가'@ require' 지시자를 사용할 때 당신의 로컬 머신에서 그것을 실행하기 때문에 헤비급은 아닙니다. 그리고 jQuery의 놀라운 장점은 스크립팅을 훨씬 쉽게 만들어줍니다. –

+1

모두에게 감사드립니다. 아마존의 체크 아웃 과정을 진행하고 있는데 처음에는 그것을 깨닫지 못했지만 AJAX는 각 "페이지"를로드하고 'window.location.pathname'을 통해 URL을 변경합니다. 나는 프로세스의 모든 페이지를 @include하도록 스크립트를 업데이트하고'waitForKeyElements'를 사용하도록 쉽게 변환했습니다. 그것은 거대한 디버깅의 악몽이었을 것에 대한 3 분의 해결책입니다. –

관련 문제