2017-02-26 1 views
0

웹 사이트를 구문 분석 (보안)하고 미리 채워진 정보로 내 단어 문서를 설정하려고합니다. 검색을 사용 2 부 : javascript에서 applescript로 변수 전달하기

  • AppleScript로 내 템플릿
  • 로 교체하는 사파리에서이 정보를 전달 (나는 그것을 제어하지 않고는이 동적으로 생성 된)
  • 페이지에서 정보를 추출

    1. : 나는 3 단계를 고려

    나는 첫 번째 파가 작동하고 추출 스크립트가 작동합니다. jquery (사이트에서 사용하지 않음)를 첨부해야하고 호출하고 두 번 연결한다는 것을 알았지 만 javascript에서 appescript로 매개 변수 하나를 전달하는 방법을 알지 못합니다.

    어쨌든, 내 문제는 내가 applescript에서 빈 변수를 얻을 수 있지만 자바 스크립트 부분이 아주 잘 작동합니다 (나는 테스트하고 올바른 값을 얻음).

    findMe가 appescript 변수로 반환하는 javascript 값을 얻는 방법에 대한 조언을 주셔서 감사합니다. 또한 멋진 스크립트가 될 수있는 두 가지 인수를 사용하여 스크립트를 단순화하는 방법도 알려줄 수 있습니다.

    to getClaimFile(needle) 
    
    tell application "Safari" 
        set input to do JavaScript " 
    
    
        (function() { 
    
          function loadScript(url, callback) { 
    
          var script = document.createElement('script') 
         script.type = 'text/javascript'; 
    
         if (script.readyState) { //IE 
           script.onreadystatechange = function() { 
           if (script.readyState == 'loaded' || script.readyState == 'complete') { 
              script.onreadystatechange = null; 
              findMe('" & needle & "') 
            } 
           }; 
         } else { //Others 
         script.onload = function() { 
        findMe('" & needle & "') 
         }; 
        } 
    
        script.src = url; 
        document.getElementsByTagName('head')[0].appendChild(script); 
    } 
    
    loadScript('https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js',  function() { 
    
        //jQuery loaded 
        console.log('jquery loaded'); 
    
    }); 
    
    })(); 
    
    
    
    
    
    function findMe(squery) { 
    
         return $('iframe#app_win').contents().find('iframe#app_subwin').contents().find('label:contains('+squery+')').parent().next('td').text() 
    } 
    " in current tab of window 1 
    end tell 
    return input 
    
    end getClaimFile 
    
    set claimNum to getClaimFile("Claim #:") 
    set fileNum to getClaimFile("File Number:") 
    log claimNum 
    log fileNum 
    
  • 답변

    0

    AppleScript로 반환하는 값은 펑키합니다. JavaScript에서와 같이 'return'문을 지정하지 않습니다. 대신 문에서 마지막 변수는 그대로 반환됩니다.

    1. 자바 스크립트를 실행하고 값을 함수의
    2. 잡아 반환 값을 반환하는 함수를 작성하고 애플 스크립트에서 사용 : 여기

      당신이 뭘 하려는지의 단순화 된 버전입니다

    to getTagName(searchterm) 
    
        tell application "Safari" 
         set myreturnvalue to do JavaScript " 
         var tags = document.querySelectorAll('." & searchterm & "'); 
         var tag = (tags.length) ? tags[0].innerHTML : 'not found in JS'; 
         tag; " in tab 1 of window 1 
        end tell 
    
    myreturnvalue 
    
    end getTagName 
    
    set myrealtag to getTagName("post-tag") 
    log myrealtag 
    
    set myfaketag to getTagName("foobar") 
    log myfaketag 
    

    StackOverflow 페이지를 방문하는 동안이 코드를 실행하면 첫 번째 테스트 (myrealtag)는 페이지에 클래스 .post-tag이있는 첫 번째 요소의 이름을 반환합니다. 두 번째 테스트 (foobar)는 페이지에서 찾을 수없는 검색 문자열을 사용하므로 "JS에서 발견되지 않음"(위의 JS 조각에서 지시 한대로)을 반환합니다.

    여기에는 작은 값의 반환 값이 있습니다. getTagName AppleScript 함수가 myreturnvalue을 반환하도록 구성되었습니다. myreturnvalue은 JavaScript로 채워지는 변수입니다. JavaScript는 tag의 값을 반환하도록 구성됩니다.