2017-02-26 26 views
0

ウェブサイトの解析(セキュリティ保護)を行い、事前入力した情報を使って単語文書を設定しようとしています。検索の使い方 パート2:javascriptからapplescriptに変数を渡す

  • AppleScriptと私のテンプレート
  • に置き換えるサファリからこの情報を渡す(私はそれをコントロールしていないと、その動的に生成)
  • ページから情報を抽出

    1. :私は3つのステップを検討し

    私は最初の仕事を得て、抽出スクリプトが機能します。私はjquery(サイトはそれを使用しません)を添付する必要があったと私はそれを2回呼び出すと接続を知っているが、私はjavascriptからapplescriptに1つのパラメータを渡す方法はわかりません2。問題は、私は、AppleScriptで空の変数を取得するjavascriptの部分は非常にうまく動作します(私はテストし、それは正しい値を取得する)。

    findMeがappescript変数に返すjavascriptの値を取得する方法についてのヒントをありがとうと思います。また、2つの引数を使って1つの呼び出しにスクリプトを簡素化する方法も教えてください。

    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. はJavaScriptを実行し、値
    2. グラブを返す関数関数の戻り値を作成し、AppleScriptの中でそれを使用します

    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クラスの最初の要素の名前を返します。 2番目のテスト(foobar)では、ページに見つからない検索文字列が使用されるため、「JSには見つかりません」(上記のJSスニペットの指示に従って)が返されます。

    戻り値の小さなカスケードがここにあります。 getTagName AppleScript関数がmyreturnvalueを返すように設定されています。 myreturnvalueは、JavaScriptによって読み込まれる変数です。 JavaScriptはtagの値を返すように設定されています。