4

私がやりたいことは、iframe に光沢のあるアプリをロードするときに、wordpress にログインしているユーザーからユーザー ID を取得することです。この変数は、ユーザー固有のデータを保存および変更するために使用できます。


次のコードをワードプレスページに追加することで、いくつかの方法が得られました。

<?php global $current_user; 
get_currentuserinfo(); 
$user_name = $current_user->user_login; 
$user_ID = get_current_user_id(); 
?>

そして、これをjavascript変数にします:

<script type="text/javascript"> 
var username = <?php echo json_encode($user_name) ?> ; 
var userID = <?php echo json_encode($user_ID) ?> ; 
</script>




ここに ある例を使用すると、div ボックスをクリックすると変数を取得できます。

ui.R:

library(shiny)

shinyUI( bootstrapPage(

  # include the js code
  includeScript("get_user_id.js"),

  # a div named mydiv
  tags$div(id="mydiv",
           style="width: 50px; height :50px; left: 100px; top: 100px;
           background-color: gray; position: absolute"),

  # an element for unformatted text
  verbatimTextOutput("results")
))

サーバー.R:

shinyServer(function(input, output, session) {
  output$results = renderPrint({
    input$mydata
  })
})

get_user_id.js:

$(document).ready(function() {
  document.getElementById("mydiv").onclick = function() {
  document.domain = "DOMAIN_NAME_HERE"; 
  var username = parent.username; 
  var userID = parent.userID; 
    Shiny.onInputChange("mydata", userID);
  };
});



iframe にロードされた光沢のあるアプリは wordpress ページとは別のポートにあるため、ドメイン名 (または IP) が必要であることに注意してください。iframeは次の方法で作成する必要があります。

<script type="text/javascript"> 
document.domain = "DOMAIN_NAME_HERE"; 
</script> 
<iframe id="example1" style="border: none; width: 100%; height: 500px;" src="APP_URL" height="150" frameborder="0"></iframe>




しかし、私が望むのは、アプリが読み込まれるとすぐに変数を取得して、アプリで使用してデータをデータベースなど
に保存できるようにすることです。これを行う方法が見つかりませんでした。「.onload」または試したいくつかのjqueryの代替手段を使用してこれを達成できませんでした。どんなヒントでも大歓迎です。




編集: ここにも投稿: https://groups.google.com/forum/#!topic/shiny-discuss/3XM2mHuzqRs

4

2 に答える 2

3

Erik Westlund は親切にも次の解決策を提供してくれました。


get_user_id.js:

document.domain = "MYDOMAIN.com"; 

var userIDVariableName = parent.userID; 
var userID = document.getElementById("userID"); 
userID.value = userIDVariableName; 

var usernameVariableName = parent.username; 
var username = document.getElementById("username"); 
username.value = usernameVariableName;

上記のように、ドメインを変更することを忘れないでください。そして、iframe をロードするページに設定します。


ui.R:

library(shiny) 

shinyUI( bootstrapPage( 

# Hidden input boxes to save the variable to 
HTML(‘ <input type="text" id="userID" name="userID" style="display: none;"> ‘), 
HTML(‘ <input type="text" id="username" name="username" style="display: none;"> ‘), 


# include the js code 
includeScript("get_user_id.js"), 

# Show the output 
textOutput("view") 
))

必要に応じてスクリプトへのパスを変更します。


サーバー.R:

shinyServer(function(input, output, session) { 



userID <- reactive({ input$userID }) 
username <- reactive({ input$username }) 

output$view <- renderText( paste0( "User ID is: ",userID()," and username is: ",username() ) ) 

})


これを iframe を含むページに追加します。

WordPress から変数を取得するための PHP。

<?php global $current_user; 
get_currentuserinfo(); 
$user_name = $current_user->user_login; 
$user_ID = get_current_user_id(); 
?>

そして、これをJava変数にします:

<script type="text/javascript"> 
var username = <?php echo json_encode($user_name) ?> ; 
var userID = <?php echo json_encode($user_ID) ?> ; 
</script>

ドメインと iframe を設定します。

<script type="text/javascript"> 
document.domain = "MYDOMAIN.com"; 
</script> 
<iframe id="example1" style="border: none; width: 100%; height: 500px;" src="PATH_TO_SHINY_APP" width="300" height="150" frameborder="0"></iframe>
于 2014-05-27T12:08:03.170 に答える
0

Shiny アプリが起動したらすぐに呼び出したい場合はonInputChange、クリック イベントをリッスンする代わりに、次の JavaScript コードを使用する必要があります。

$(function() {
  setTimeout(function() {
    Shiny.onInputChange("mydata", userID);
  }, 10)
});
于 2016-01-03T18:28:34.303 に答える