当我在 iframe 中加载闪亮的应用程序时,我想要做的是从 wordpress 登录用户那里获取用户 ID。然后可以使用此变量来保存和修改用户特定的数据。
通过将以下代码添加到 wordpress 页面,我已经获得了一些方法:
<?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);
};
});
请注意,需要域名(或 IP),因为 iframe 中加载的闪亮应用程序位于 wordpress 页面之外的另一个端口上。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